【问题标题】:Phaser - error: Cannot read property 'on' of nullPhaser - 错误:无法读取 null 的属性“on”
【发布时间】:2020-02-04 01:05:00
【问题描述】:

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

当您单击精灵“玩家”时,游戏应该从一个场景切换到另一个场景。不幸的是,这给出了一个错误:Cannot read property 'on' of null

有什么想法吗?

【问题讨论】:

    标签: javascript phaser-framework


    【解决方案1】:

    它不起作用的原因是您在这里混合了 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】:

      您是否检查过 pointerdown event 是否正常工作?让我们尝试将 player.inputEnabled = true; 行替换为 player.setInteractive(); 行。然后,在 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 正在发射,我们会从那里拿走它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-07
        • 2017-06-07
        • 1970-01-01
        • 1970-01-01
        • 2022-07-27
        • 2021-11-08
        • 2021-12-03
        • 2020-03-27
        相关资源
        最近更新 更多