![](/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.