アド企画 制作部
アド企画 制作部
 

Flashでスマホアプリ開発:画面回転でRESIZE(リサイズ)イベントを取得してみる (Air for iOS | Air for Android)

Flashでスマホアプリ開発:画面回転でRESIZE(リサイズ)イベントを取得してみる (Air for iOS | Air for Android)


Flash で AcrionScript3.0を使って、画面回転(RESIZE)のイベントを取得するテストをしてみました。
感想としては、簡単っちゅえば簡単なのですが、思ったより設定が細かい。

とりあえず、今回の実験の結果をご報告いたします。

準備

[ファイル]→[新規作成]で「Air For iOS」又は「Air For Android」を選択して、Flashファイルを作成します。
例では、なんとなく「回転を有効にするアプリなら横のレイアウト重視かな」と思って、横と縦のサイズを逆にしてみました。

20160123a


パブリッシュの設定で、画面回転を有効にしておきます。

[プロパティ]→[パブリッシュ]の「ターゲット」の横に並んでいるスパナのマークをクリックして、アプリケーション設定の編集を開きます。

1)「起動時の縦横比」を「自動」に
2)「自動回転を有効にする」にチェック
と設定し、「OK」をクリックします。

20160123b

なんとなく「こんなレイアウトになっていくのかな」という四角を描いてみました。

20160123c

ActionScript3.0で記述してみる

メイン(シーン1)のタイムラインの最初のフレームに、次の様なコードを書いてみます。

20160123d


import flash.events.Event;

stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;
//他の設定も試してみましたが、「NO_SCALE」と明示しておかないと、どうもうまくイベントをキャッチできませんでした。

stage.align = flash.display.StageAlign.TOP;

//画面回転を監視
stage.addEventListener(Event.RESIZE, onResize);

function onResize(e: flash.events.Event): void {
	trace(stage.stageWidth);
}‌


これをデバッグしてみます。

20160123e

[device]→[Rotate Left]または[Rotate Right]として、画面を回転させてみます。
「trace(stage.stageWidth)」としていますので、起動時と、回転するたびに出力にステージの横幅が表示されれば成功です。

20160123f


・・・回転させる度に2回ずつ出力されています???

2回ずつ実行されている…

まだ実機では試していないので何とも言えないのですが、イベントが検出されるたびに2回ずつ出力される問題はちょっと調べたくらいでは、答えにたどりつけませんでした…。

ので、スクリプトを修正。

20160123g

 
import flash.events.Event;

stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;
stage.align = flash.display.StageAlign.TOP;


//ステージの横幅を控える(最初は「0」に設定)
var oldstagewidth: int = 0;


//画面回転を監視
stage.addEventListener(Event.RESIZE, onResize);


function onResize(e: flash.events.Event): void {

	//控えておいたステージの横幅と現在のステージの横幅が異なる場合は実行
	if (stage.stageWidth != oldstagewidth) {

		//現在のステージの横幅を控える
		oldstagewidth = stage.stageWidth;

		//現在のステージの横幅を出力
		trace(stage.stageWidth);
	}
}‌


意図したとおりに、画面回転イベントをキャッチできている模様。
答えにたどり着けませんでしたが、とりあえずこれでも別にいいかな…と思っております。

20160123h