移相器-错误:无法读取null的属性“ on”

时间:2019-10-06 13:19:46

标签: javascript phaser-framework

我正在使用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');
  })
}

当您单击精灵“玩家”时,游戏应从一个场景切换到另一个场景。不幸的是,这会产生一个错误:无法读取null的属性“ on”

有什么想法吗?

2 个答案:

答案 0 :(得分: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组件上监听事件。

答案 1 :(得分:1)

您是否已检查 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正在开火,我们将从那儿拿走它。