Я работаю над простой игрой, используя Phaser.

Мой код:

preload() {
  this.load.image('player', 'img/player.png');
}

create() {
  var player = this.add.sprite(100,100,'player');

  player.inputEnabled = true;
  player.input.on('pointerdown', () => {
    this.scene.stop('ThisScene');
    this.scene.start('NextScene');
  })
}

Игра должна переключаться с одной сцены на другую, когда вы нажимаете на спрайта «игрок». К сожалению, это приводит к ошибке: невозможно прочитать свойство 'on' из null

Любые идеи?

1
btm2424 6 Окт 2019 в 16:19

2 ответа

Лучший ответ

Причина, по которой это не работает, состоит в том, что у вас есть смесь кода Phaser 2 и Phaser 3 здесь. inputEnabled = true происходит из Phaser 2, а использование прослушивателя событий on происходит из Phaser 3.

Вы не указываете, какую версию вы используете, поэтому я приму 3 и исправлю код для этого:

preload() {
  this.load.image('player', 'img/player.png');
}

create() {
  var player = this.add.sprite(100,100,'player');

  player.setInteractive();

  player.on('pointerdown', () => {
    this.scene.start('NextScene');
  })
}

Когда игровой объект включен для ввода, вы слушаете события непосредственно на самом игровом объекте, а не на компоненте input.

2
PhotonStorm 7 Окт 2019 в 12:14

Вы проверили, работает ли pointerdown event ? Попробуем заменить строку player.inputEnabled = true; на строку player.setInteractive(); . Затем выполните console.log('pointerdown event working') внутри event listener :

create() {
  var player = this.add.sprite(100,100,'player');

  player.setInteractive();

  player.input.on('pointerdown', () => {
    console.log('pointerdown event working');

    this.scene.stop('ThisScene');
    this.scene.start('NextScene');
  })
}

Дайте мне знать, если это сработает ... Если нет, мы узнаем, что event стреляет, и заберем его оттуда.

1
Manuel Abascal 6 Окт 2019 в 19:57