我正在创建一个Phaser游戏,它将构成一个更大的JS应用程序的一部分。当玩家完成一个等级时,我需要隐藏游戏,以便在游戏在下一个等级的后期再次显示之前返回执行其他任务。
我很难找到一种合理的方法来触发一个事件(或另一种调用回调函数的方式)从Phaser.Game
到实例化它的JS。
我此刻想到的唯一想法是手动将回调添加到游戏中:
function onLevelComplete() {
// example callback function
}
this.game = new Phaser.Game(800, 600, Phaser.AUTO, this.el);
this.game.levelCompleteCallback = onLevelComplete;
然后Phaser.Game
可以在任何地方使用(例如在州内)我可以this.game.levelCompleteCallback()
。
麻烦的是,这感觉非常紧密。我想要的是一种方法来做this.game.fireEvent('levelComplete')
这样的事情,而不必关心是否有任何东西在另一边倾听。
是否有任何内置的东西,我错过了可以让我做我需要的东西?
答案 0 :(得分:5)
我会在你的游戏中使用一个信号:
this.onLevelComplete = new Phaser.Signal();
...
// some condition is met
this.onLevelComplete.dispatch();
只要信号暴露在上面的应用程序中,它就可以很容易地自己注册。也许一个全局对象(gameEvents?),或者到当前状态的路径,或者游戏可能会将事件的引用传递到某个应用程序中。有很多方法可以做到这一点。
function appDoesSomething() {}
gameEvents.onLevelComplete.add(this.appDoesSomething, this);
无论哪种方式,最终结果是游戏可以快乐地发出信号,而无需关心应用是否正在收听。
虽然这种设置完全脱离,但它们在某个地方连接起来是不可能的。它取决于你在哪里。