(Flash Lite)ボタン押下時のイベントハンドラにやられた
Flash Lite 1.1 の話。
ボタンを幾つか用意して、あるボタンを押すと任意のURLを開くっていう極々一般的なことをしようと思ってます。
で、ネットでケータイ用のイベントハンドラ探して、ボタンのインスタンスに書いたのは下記のようなコードです。
//ボタン1のイベントハンドラon(keyPress "
" ) {getURL( "http://jehupc.exblog.jp/" );
}
//ボタン2のイベントハンドラ
on(keyPress "
" ) {getURL( "http://www.google.com" );
}
これで実行すると、ボタン2を押下しても、ボタン1のイベントが走ってしまうのです。
で、かなり悩んだ挙句見つけたのが、サンデープログラマーのメモ: keyPress"ボタン番号"についてです。
ここで、on(keyPress"ボタン番号"){}はそのボタンにフォーカスがなくてもボタンを押せば反応するという記述が。。。
試しに、Device Cetral でswf起動してどこのボタンにもフォーカスが当たってない状態で決定ボタン押下するとボタン1のイベントハンドラが動いてます。
ここでピンときて、各ボタンインスタンスに書いてた on(keyPress"ボタン番号"){} を全てのけて、代わりに on(press){} を書くと案の定、要件どおりに動きました。
普通の Flash と同じようにあるボタンで決定キー押下した時の処理は on(press){} で書いてやればよかったんですね。
で、on(keyPress"ボタン番号"){} はフォーカスない時に制御するもんだから、基本的に1つだけ実装するということもわかりました。
最初に on(keyPress"ボタン番号"){} を書いてしまったが故にこの問題解決するのに相当時間がかかってしまいました。。。
(なので on(keyPress"ボタン番号"){} の方法でメニューとか実装しようとすると、1つのボタンだけ on(keyPress"ボタン番号"){} 実装し、後のメニューボタンは今どのボタンにフォーカスがあるっていうのをグローバル変数とかに入れて、on(keyPress"ボタン番号"){}実行時に if や switch で振り分けるという作りにしないと行けないということです。)
後、これも不思議な仕様ですが、on(keyPress"ボタン番号"){} 書いてると、on(press){} は動かないんですね。。。
参考: