Flashでスマホアプリ開発:画面回転でRESIZE(リサイズ)イベントを取得してみる (Air for iOS | Air for Android)
Flash で AcrionScript3.0を使って、画面回転(RESIZE)のイベントを取得するテストをしてみました。
感想としては、簡単っちゅえば簡単なのですが、思ったより設定が細かい。
とりあえず、今回の実験の結果をご報告いたします。
準備
[ファイル]→[新規作成]で「Air For iOS」又は「Air For Android」を選択して、Flashファイルを作成します。
例では、なんとなく「回転を有効にするアプリなら横のレイアウト重視かな」と思って、横と縦のサイズを逆にしてみました。
パブリッシュの設定で、画面回転を有効にしておきます。
[プロパティ]→[パブリッシュ]の「ターゲット」の横に並んでいるスパナのマークをクリックして、アプリケーション設定の編集を開きます。
1)「起動時の縦横比」を「自動」に
2)「自動回転を有効にする」にチェック
と設定し、「OK」をクリックします。
なんとなく「こんなレイアウトになっていくのかな」という四角を描いてみました。
ActionScript3.0で記述してみる
メイン(シーン1)のタイムラインの最初のフレームに、次の様なコードを書いてみます。
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); }
これをデバッグしてみます。
[device]→[Rotate Left]または[Rotate Right]として、画面を回転させてみます。
「trace(stage.stageWidth)」としていますので、起動時と、回転するたびに出力にステージの横幅が表示されれば成功です。
・・・回転させる度に2回ずつ出力されています???
2回ずつ実行されている…
まだ実機では試していないので何とも言えないのですが、イベントが検出されるたびに2回ずつ出力される問題はちょっと調べたくらいでは、答えにたどりつけませんでした…。
ので、スクリプトを修正。
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); } }
意図したとおりに、画面回転イベントをキャッチできている模様。
答えにたどり着けませんでしたが、とりあえずこれでも別にいいかな…と思っております。
