我正在使用WebPack来构建游戏,但遇到了范围问题。我会尽力解释。
我的TestScene类文件:
import 'phaser';
import Npcs from 'modules/Npcs.js';
const npcs = new Npcs()
export class TestScene extends Phaser.Scene {
constructor () {
super('TestScene')
}
preload(){...}
create(){
this.physics.add.collider(
this.player,
this.bombs,
npcs.hitBomb,
null,
this
)
}
}
我的Npcs类文件:
import 'phaser';
const gameplayStates = new GameplayStates()
export default class Npcs {
hitBomb (player, bomb) {
this.physics.pause();
player.setTint(0xff0000);
this.entityDestroy()
}
entityDestroy () {
console.log('destroyed')
}
}
this.player
和this.bombs
到位,并按照我希望的各种方式按预期工作。
collider方法中的回调具有this
(testScene)作为上下文,因此this.entityDestroy()
似乎不再起作用并引发错误:
app.bundle.js:116068 Uncaught TypeError: this.entityDestroy is not a function
。
我怀疑这是因为从对撞机调用方法时,npcs
类不是this
的范围。
使用collider方法解决此问题的正确方法是什么?
谢谢,
非常感谢您的帮助。 MHC
答案 0 :(得分:0)
我问过www周围,并得到了令人满意的解决方案。
我得到的主要解决方案是更改collider方法中的上下文。像这样:
this.physics.add.collider(
this.player,
this.bombs,
npcs.hitBomb,
null,
npcs
)
npcs类成为hitBomb函数的上下文的位置。该解决方案的问题在于,我无法再在npcs函数中引用this
(场景引用)。
我发现最好的解决方法是添加更多行代码:
this.physics.add.collider(
this.player,
this.bombs,
function (player, bomb) {
this.physics.pause();
npcs.hitBomb(player, bomb);
},
null,
this
)
这具有更多的代码行,但是它使我可以保留正在调用collider函数的场景的范围并建立npcs类的范围。
感谢所有花时间与我聊天并帮助我找到解决方案的人。