古の少年心を呼び覚ますおふざけギミックをFLASHに仕込んでみるメモです。
まずは完成品と、完成スクリプトを
var my_command:String;
stage.addEventListener(KeyboardEvent.KEY_DOWN,fnc_keydown);
function fnc_keydown(event:KeyboardEvent):void{
IME.enabled = false;
my_command += event.keyCode; //判定を保存
ins_keycode.text = String(event.keyCode); //KEYCODEフィールドに文字を表示
ins_unicode.text = String.fromCharCode(event.charCode); //UNICODEフィールドに文字を表示
ins_total.appendText( String(event.keyCode) ); //TOTALINPUTフィールドに文字を表示
if( event.keyCode == Keyboard.ENTER ){ //エンターを押したら実行
if( my_command == "3838404039373937666513" ){ //↑↑↓↓→←→←BAだったら
ins_total.text = "COMMAND SUCCESS!!";
ins_ufo.ins_ufo_core.gotoAndStop( 2 );
} else {
ins_total.text = "COMMAND FAILED...";
ins_ufo.ins_ufo_core.gotoAndStop( 1 );
}
}
my_command = ""; //判定初期化
}
では、順を追って作成方法を説明していきます。
- 【1】必要なリソースを用意
-

◆asレイヤー:上記のスクリプトをコピペ(詳細は【3】以降で)
◆mcレイヤー:後述
◆textレイヤー:ダイナミックテキストを3つ配置。それぞれ…”ins_total”、”ins_keycode”、”ins_unicode”というインスタンス名を付けましょう。
◆bgレイヤー:宇宙の背景。無くてもいい - 【2】コマンド成功時にムービークリップが変化するように
-
mcレイヤーに配置されているmcは入れ子になってて、以下みたいなカンジです。
◆mc_ufo(ufoが1個ふわふわしてるだけ、インスタンス名はins_ufo_core)
↓
◆mc_ufo_core
1フレーム目→UFOが1個だけ配置(静止画)
2フレーム目→UFOと、オプションUFO(mc_ufo_option)いっぱいちなみにmc_ufo_coreのフレームの見た目は以下のカンジ
- 【3】判定用の変数作成
-
まず、コマンドが成功したかを判定するための変数を作ります。ストリング型で。
var my_command:String;
- 【4】イベント登録
-
次にステージ全体に対してキーボードイベントを登録します。イベント対象は”キーボードが押されたら”(KEY_DOWN)。イベントが実行された実行される関数はfnc_keydownとします。
stage.addEventListener(KeyboardEvent.KEY_DOWN,fnc_keydown); function fnc_keydown(event:KeyboardEvent):void{} - 【5】判定開始&文字列を蓄積
-
fnc_keydown関数の中に処理を記述していきます。
まず、念のためにユーザーの入力モードを半角英数モード(IME無効化)にします。
IME.enabled = false;
次にさっき作った”my_command”の中に代入演算子”+=”で、入力したキーコードを格納していきます。
my_command += event.keyCode; //判定を保存
- 【6】デバッグ用処理(実装時には無くてもいいです)
-
fnc_keydown関数の中に処理を記述していきます。
ちなみにこの記述はコマンドの成否に全然関係ないです、入力状況を監視したい時用なカンジです。実装する時には不要でしょうね。
ins_keycode.text = String(event.keyCode); //KEYCODEフィールドに文字を表示 ins_unicode.text = String.fromCharCode(event.charCode); //UNICODEフィールドに文字を表示 ins_total.appendText( String(event.keyCode) ); //TOTALINPUTフィールドに文字を表示
KeybordEventの値を取得して、それぞれ…event.keyCodeで入力されたキーボードのキーコード、event.charCodeで入力されたキーの文字列…はそのままは取得できないんで(文字コードに割り当てられた数字が出ちゃうので)String プロパティにある、「()内のコードのUnicode(2バイト文字の統一規格)を返すメソッド」であるfromCharCodeメソッドを使って…String.fromCharCode(event.charCode)と記述すれば、理論上は値が取れます(IMEがONだと変な挙動するけど)。
で、最後に入力したキーコードを全部出す記述も出力(成否の確認のためみたいな)。
- 【7】成否判定
-
ここがコア、ここで判定してます。
if( event.keyCode == Keyboard.ENTER ){ //エンターを押したら実行 if( my_command == "3838404039373937666513" ){ //↑↑↓↓→←→←BAだったら ins_total.text = "COMMAND SUCCESS!!"; ins_ufo.ins_ufo_core.gotoAndStop( 2 ); } else { ins_total.text = "COMMAND FAILED..."; ins_ufo.ins_ufo_core.gotoAndStop( 1 ); } my_command = ""; //判定初期化 }まずif文で押されたキーコードと、ENTERボタンが押された場合の定数(Keyboard.ENTER)を比較して、押されてた場合のみコマンドをチェックするようにします。
次にさらにif文をかいて、my_commandと”↑↑↓↓→←→←BA”のキーコードである”3838404039373937666513″を比較します。もし達成していたらデバッグテキストに”COMMAND SUCCESS!!”と出力しつつ、ins_ufoと名の付いたムービークリップの中にあるins_ufo_coreのタイムラインをgotoAndStop( 2 )で2フレーム目に移動させてUFOのムービークリップを変化させます。
逆にコマンドが達成してなかったらデバッグテキストに”COMMAND FAILED…”と出して、UFOのムービークリップを初期化(1フレーム目に移動)させます。
また、コマンドが成功しててもしてなくても、最後にコマンドを初期化します。
以上です。キーボードイベントは思ってたよりもシンプルだったので、配列かswitchと組み合わせればタイピングゲームとかも作れそうですね。
ドット素材:フリーWEB素材サイト「DOTS DESIGN(ドッツ・デザイン)」様
参考文献:Adobe ActionScript 3.0 コンポーネントリファレンスガイド
参考文献:Adobe Flash Platform キーボード入力のキャプチャ
参考文献:FlashゲームPG講座 For AS3.0【キーボードの操作について】







