Phaser - error: Cannot read property 'on' of null

Phaser - error: Cannot read property 'on' of null

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

当您点击 sprite 'player' 时,游戏应该从一个场景切换到另一个场景。不幸的是,这给出了一个错误:无法读取 属性 'on' of null

有什么想法吗?

您检查过 pointerdown event 是否正常工作吗?让我们尝试用行 player.setInteractive(); 替换行 player.inputEnabled = true;。然后,在 event listener:

中执行 console.log('pointerdown event working')
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 正在发射,我们会从那里开始。

它不起作用的原因是您在此处混用了 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 组件上监听事件。