FlashLiteで上下キーを使う
1.メニューを作る
FlashLite1.1でTOPページだったり、何らかのメニュープログラムを作る。
このときに問題になるのは上下キー問題だ。
他のキーは単純にイベントが起きて入力出来る
例:
on (keyPress "0") { gotoAndPlay("main"); }
こんな感じ。
FlashLiteの場合、端末のキーを押した処理を”ボタン”のスクリプトに書く必要がある。
でも、この方法では上下キーは処理できない。
困った。
さて、そこで上下キーを押すとどのような動きになるかを調べてみよう。
基本的に、ボタンやテキストフィールドを順にフォーカスしていく。
フォーカスとは、ボタンなどが選択されている状態。
特に指定しないと、黄色い枠がでる。
上下キーを押すとこれが順に変わっていくので、その機能を利用する。
2.ボタンを3つ作る
判定には、ステージ上にボタンを3つ配置する。
それも縦に配置する。
そして、それぞれに各スクリプトを書く。
サンプルでは画面右下に配置している。
//上に置くボタン on (rollOver) { if (old_btn == 1) { btnflag = true; } if (old_btn == 2) { btnflag = false; } call("mcmove"); old_btn = 0; } //中に置くボタン on (rollOver) { if (old_btn == 2) { btnflag = true; } if (old_btn == 0) { btnflag = false; } call("mcmove"); old_btn = 1; } //下に置くボタン on (rollOver) { if (old_btn == 0) { btnflag = true; } if (old_btn == 1) { btnflag = false; } call("mcmove"); old_btn = 2; }
上ボタン 0
中ボタン 1
下ボタン 2
と番号をつける。
最初は中ボタンに注目。
前回、”2”だった場合はbtnflag=trueとなっている。
上方向に動いた場合には、trueになる。
逆に、前回”0”だった場合はfalseになっている。
ボタンが2つだけだと、常に01010とボタンの番号が変化するだけなので、上下どちらのキーを押したかを判別できない。
文字だけだとわかりにくいので、サンプルで動きを確認して欲しい。
ボタンのフォーカスは黄色で表示される。
今回のサンプルでは、わざとこの状況を見せているが、
_focusrect=false;
という命令をスクリプトの始めに挿入しておくと、フォーカスの枠は表示されない。
3.結果の反映
入力した結果をmcmoveで表示に反映する。
サブルーチンmcmoveは、専用に1フレーム用意したスクリプトだけのフレーム。
callで呼ばれると、そのフレームのスクリプトのみが呼ばれる。
call先の1フレームが終わると、処理が戻る。
そのサブルーチンで最大値/最小値のチェックと、フレーム毎に数字を書いたmcの切り替えを行う。
サンプルでは1〜5で動き、数字はループしない。
サンプルムービーはこちら
http://hspcenter.com/i/sample/menu.swf
PCとMacで試すときは、1度画面をクリックしてムービーをアクティブにしてから、TAB(下キー)、SHIFT+TABキー(上キー)として実験できる。
flaファイルはこちら
http://www.hspcenter.com/i/fla/menu.zip