繁体   English   中英

从Phaser游戏JS向外部JS触发事件?

[英]Firing an event from Phaser game JS to outer JS?

我正在创建一个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') ,而不必关心对方是否在监听。

有什么我想念的东西可以让我做我需要做的事情吗?

我会在您的游戏中使用信号:

this.onLevelComplete = new Phaser.Signal();

...

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

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

function appDoesSomething() {}

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

无论哪种方式,最终结果都是游戏可以愉快地触发信号,而无需关心应用是否在监听。

虽然无法完全分离此设置,但它们会在某个地方加入。 这取决于您的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM