Phaser с addEventListener

Я пытаюсь зафиксировать событие щелчка и изменить состояние игры, но постоянно получаю ошибку «undefined». Я использую этот код для добавления состояний игры:

var game = new Phaser.Game(800, 600, Phaser.AUTO, 'canvas');
game.state.add('Boot', Boot);
game.state.add('Level_1', Level_1);
game.state.start('Boot');

Здесь я запускаю вступление к игре и пытаюсь зафиксировать событие щелчка.

var button;
var Boot = function(game) {};

Boot.prototype = {
preload: function() {
    this.load.image('logo','img/logo_allcomp_white.png');
    this.load.image('welcome','img/welcome.png');
    this.load.image('gradient','img/gradient.png');
},

create: function() {
    this.add.sprite(0,0,'gradient');
    this.stage.backgroundColor = '#ffffff';
    this.add.sprite(20,20,'logo');
    var cutters = this.add.tileSprite(0, 0, this.game.width, this.game.height,'welcome');
    cutters.autoScroll(-20,0);
    button = document.getElementById('startbtn');
    button.addEventListener('click',this.updateButton);
},

updateButton: function() {
this.game.state.start('Level_1');
}
};

Я не могу заставить его работать. Возможно ли взаимодействие с другими элементами DOM вне холста? Добавление этой кнопки на холст у меня не работает. Я должен держать панель управления снаружи


person przemoo83    schedule 18.02.2015    source источник


Ответы (1)


В updateButton вы указываете игру как this.game, а в области действия функции this относится к нажатой кнопке, что делает this.game неопределенным. Вы можете просто назвать свою игру с game.state.start('Level_1');

Я создал для вас ручку: http://codepen.io/kozulowski/pen/YPvyzW

person Jakub Bilko    schedule 26.02.2015
comment
@ przemoo83 Возможно, вы захотите посмотреть Function.prototype.bind: button.addEventListener('click',this.updateButton.bind(this)) - person andlrc; 01.03.2015