Phaser 3:从全局“游戏”对象启动一个场景(停止所有其他正在运行的场景)

0 javascript phaser-framework

正如标题所说。从“游戏”对象启动场景时,有没有办法停止所有正在运行的场景?

目前,当我game.scene.start(...)从场景对象外部调用时,什么也没有发生。我当前的解决方案是保留一个指向最新启动的场景的全局变量(在我的所有场景中,我使用create()类似的方法重置函数中的全局变量currentScene = this;),所以当我想启动一个新场景时,我调用currentScene.scene.start(...). 但显然这不可靠,因为我可能忘记currentScene在所有场景中重置我的全局变量(),等等......

编辑:

为了澄清我想要实现的目标:我正在制作一个带有几个场景和一些游戏对象的小型多人游戏。我有一个“套接字”模块,用于处理客户端和服务器之间的所有流量(我使用的是 socket.io)。我想做一些类似的事情:

this.socket.on('game_end', (data) => {
    // Server decides when the game stops and sends an event to all clients.
    // Here I need to stop the currently running scene (i.e. SceneInGame)
    // and show the "game finished / results" scene.
    this.game.scene.start('SceneGameEnd');
    // ^ That doesn't work. SceneInGame keeps playing and SceneGameEnd doesn't start
});
Run Code Online (Sandbox Code Playgroud)

Pho*_*orm 5

你真的不应该game.scene在 Phaser 3 中使用(事实上,从 Phaser 3.50.0 开始这甚至不起作用)。场景操作应该通过ScenePlugin,可以从任何场景中访问this.scene。即,this.scene.start('otherScene')停止当前场景,然后在下一个游戏步骤中按顺序启动给定场景。哪里-就像game.scene.start只是爆炸一样,不关心游戏步骤或它的名称。

然而,没有办法“停止所有正在运行的场景”,但是除非您启动了多个场景(通过launch或类似的方法),否则实际上不会有任何其他正在运行的场景。展示一些实际的代码,然后我们可以给出更有针对性的回应。