从Phaser游戏JS到外部JS的活动?

时间:2015-03-23 14:28:42

标签: javascript phaser-framework

我正在创建一个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')这样的事情,而不必关心是否有任何东西在另一边倾听。

是否有任何内置的东西,我错过了可以让我做我需要的东西?

1 个答案:

答案 0 :(得分:5)

我会在你的游戏中使用一个信号:

this.onLevelComplete = new Phaser.Signal();

...

// some condition is met
this.onLevelComplete.dispatch();

只要信号暴露在上面的应用程序中,它就可以很容易地自己注册。也许一个全局对象(gameEvents?),或者到当前状态的路径,或者游戏可能会将事件的引用传递到某个应用程序中。有很多方法可以做到这一点。

function appDoesSomething() {}

gameEvents.onLevelComplete.add(this.appDoesSomething, this);

无论哪种方式,最终结果是游戏可以快乐地发出信号,而无需关心应用是否正在收听。

虽然这种设置完全脱离,但它们在某个地方连接起来是不可能的。它取决于你在哪里。