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