現在のシーンにいる場合はボタンの表示を変えたい場合を調べてみた。今回はシーンを移動するボタンのクラスをCastButtonから継承して「SceneBtn」して作成。
実行結果
Zipファイル
CastMouseEvent.CAST_STATE_CHANGEで監視する
CAST_STATE_CHANGEでイベントで監視して、イベントが発行されたときのCastButtonのstate(現在の状態)を調べる
addEventListener(CastMouseEvent.CAST_STATE_CHANGE, doChangeHandler);
private function doChangeHandler(e:CastMouseEvent):void {
switch(state) {
case 0:
case 1:
case 2:this.mouseEnabled = false; this.gotoAndStop(3); break;
case 3:
case 4:this.mouseEnabled = true; this.gotoAndStop(1); break;
default:
}
}
stateの返り値の種類
すべては分からないのでとりあえずCastButtonに設定してるシーンに到着したときと離脱したとき
- state => 2 ボタンに設定してるsceneIdに設定してあるシーンに到着したとき
- state => 4 ボタンに設定してるsceneIdに設定してあるシーンから離脱したとき
stateが「2」の時にはボタン自身のマウス効果を向こうにしてからgotoAndStopで現在のシーンの時のボタンの状態のフレームへ飛ばしている。
stateが「4」の時にはボタン効果を設定して通常の状態のフレームへ飛ばしている。
ロールオーバー設定の注意点
上記のようにCAST_STATE_CHANGEでstateが「2」でボタン効果を消してもなぜか動作が狂ってしますのでstateが「2」以外のとき・・・つまり自分自身が設定しているシーン以外のときに反応するようにする
if(state!=2){
this.gotoAndStop(1);
}
今回は3つのflvの再生終了後にシーン移動をループさせているのでそのつどボタンの状態をかえる必要があったのでシーンの移動をボタンで監視する必要性があったので非常に便利な機能だな~と実感しました。場合によってはボタンのSceneIdと現在のシーンのSceneIdを比較してもできそうなきがする
参考サイト
Progressionフォーラム