キーボードのキー操作が反応しないバグ【enchant.js】


#バグの内容

  • enchant.jsでキーボード入力をしても、反応しないバグ

別の言い方をすると、

  • キー操作ができない
  • スペースキーが効かない、矢印キーが効かない

(備考:HTML単体で動かすと反応するが、<iframe>などでのホームページへの組み込みをしたり、code9leapなどで実行したりする時に反応しない。)

#バグの原因

window(ゲーム画面)にfocusが合っていないため」だと考えられる。

#デバッグ方法

方法:windowにfocusを当てるための以下のコードを一番先頭に追加する。

debug.js
window.focus();

#サンプルプログラム

以下、「スペースキーを押すと、キャラクターのframe(見た目)が変わる」プログラム。

>>デバッグ前のコード

before.js
enchant();

window.onload = function(){
    //ゲームの設定
    var game = new Core(320, 320);
    game.fps = 10;
    game.preload('chara1.png');

    //スペースキー(ASCII表の32番)が押されたとき、aボタンをオンにする
    //ゲーム内の仮想のaボタンとキーボードを繋げる - keybind
    game.keybind(32, 'a');

    game.onload = function(){
        //プレイヤーのプログラム
        player = new Sprite(32,32);
        player.image = game.assets['chara1.png'];
        player.frame = 0;
        player.x = 144;
        player.y = 144;
        game.rootScene.addChild(player);

        player.addEventListener('enterframe', function(){
            //aボタンをオンになった時(スペースキーが押された時)、プレイヤーのフレームを変える
            if(game.input.a){
              player.frame = 5;
            }
        });
    };
    game.start();
};

>>デバッグ後のコード

after.js
// * この行を追加し、windowにfocusを当てた。
window.focus();
enchant();

window.onload = function(){
    //ゲームの設定
    var game = new Core(320, 320);
    game.fps = 10;
    game.preload('chara1.png');

    //スペースキー(ASCII表の32番)が押されたとき、aボタンをオンにする
    //ゲーム内の仮想のaボタンとキーボードを繋げる - keybind
    game.keybind(32, 'a');

    game.onload = function(){
        //プレイヤーのプログラム
        player = new Sprite(32,32);
        player.image = game.assets['chara1.png'];
        player.frame = 0;
        player.x = 144;
        player.y = 144;
        game.rootScene.addChild(player);

        player.addEventListener('enterframe', function(){
            //aボタンをオンになった時(スペースキーが押された時)、プレイヤーのフレームを変える
            if(game.input.a){
              player.frame = 5;
            }
        });
    };
    game.start();
};