![](/img/trans.png)
[英]Phaser JS how to stop event Propagation(firing) from textButton.events.onInputDown event to game.input.onDown event?
[英]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.