Фазер внутри iframe, клавиатурный ввод перестает работать после потери фокуса - PullRequest
0 голосов
/ 11 июня 2018

Я работаю над игрой Phaser CE , которая поддерживает как мышь / сенсорный ввод, так и ввод с клавиатуры для выполнения различных действий.

Проблема в том, чтоигра запускается внутри iframe , и клавиатурный ввод работает правильно, пока холст не потеряет фокус.Игра делает паузу, что является правильным поведением, затем я снова щелкаю внутри холста, игра продолжается, и ввод мыши все еще работает.Но теперь клавиатурный ввод больше не работает.Когда игра не запускается внутри iframe, это не проблема, клавиатура продолжает работать после потери фокуса, паузы и затем продолжения.

Нужно ли использовать что-то кроме «game.input.keyboard».addCallbacks "проверить ввод с клавиатуры?Ниже приведен минимальный код для воспроизведения этой проблемы.

mygame.GameState.prototype = {

    create: function() {
        this.stage.backgroundColor = "#f0f";
        this._levelindex = 0;
        // ..
        // etc.

        // game input for mouse and keyboard
        this.game.input.onDown.add(this.onGameMouseDown, this); // mouse/touch
        this.game.input.keyboard.addCallbacks(this, this.doGameKeyInput, null, null); // keyboard
        // ..
    },

    onGameMouseDown: function(evt) {
        // code.. ok works fine
    },

    doGameKeyInput: function(key) {
        var kc = key.keyCode;
        var action = 0;
        if (kc == 32) {action = 1}; // space
        if (kc == 90) {action = 2}; // Z
        if (kc == 88) {action = 3}; // X
        // etc. this works until canvas loses focus
    }
}

Кроме того, я создал страницу, чтобы изолировать и воспроизвести эту проблему, см. тест клавиатуры .

...