簡體   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