我是Phaser3的新手,在开始一个疯狂的项目之前,我想知道我应该如何开始,在场景之间切换。我看到了几个功能,启动,启动,切换,运行,恢复,暂停等。
例如,让我说我想有两个场景,一个菜单和一个游戏。我在菜单上启动,我想去游戏场景,如果我点击一个按钮,然后再回到菜单场景。
我通过调用start函数实现了这一点,但我注意到每次都调用all、init、preload和create函数,因此我要加载所有图像,一次又一次地设置所有侦听器。
这似乎是错误的,我应该使用启动或切换功能并暂停和恢复吗?但我该如何隐藏上一幕呢?
提前谢谢。
发布于 2018-11-10 20:23:55
这个问题可能有点过于宽泛,但考虑到Phaser 3,它仍然取决于您的菜单的用途。
我认为大多数游戏都有一个主菜单,通常在游戏开始时会被调用,然后不会再被调用。
如果这是一个游戏中的菜单,设置可以改变,或者游戏的一部分可以重置/重新启动,那么重定向到一个完全不同的场景可能是没有意义的。
有了Phaser 3对多个场景的支持-- 发展日志#119和发展日志#121可能是当前最好的信息来源--另一个选择是在当前场景中启动一个新场景来处理这个问题。
然而,如果这是真正的UI,没有什么可以阻止您创建一个覆盖,而不是产生一个完整的场景。
如果您关心性能,我可能会考虑是否需要调用整个菜单,或者简化的菜单是否可以工作。另外,在进入菜单和主游戏之前,请确保您正在预装资产。
我个人使用Boot > Preloader > Splash屏幕>主菜单>主游戏场景,其中预加载程序加载了我需要的大部分资产。这有一个缺点,一个较长的初始负载,但向上的最小加载后,这一点。
场景转换
如何在我的起始模板中处理这些场景是在创建场景时将场景添加到场景管理器中。然后我通过start转换到第一个场景。
this.scene.add(Boot.Name, Boot);
this.scene.add(Preloader.Name, Preloader);
this.scene.add(SplashScreen.Name, SplashScreen);
this.scene.add(MainMenu.Name, MainMenu);
this.scene.start(Boot.Name);然后,我只是继续start的下一个场景的需要。
this.scene.start(Preloader.Name);对于另一个使用多个场景的游戏,我最终创建了以下函数(TypeScript)来处理这个问题:
private sleepPreviousParallelScene(sceneToStart: string): Phaser.Scene {
if (this.uiSceneRunning !== sceneToStart) {
// Make sure that we properly handle the initial state, when no scene is set as running yet.
if (this.uiSceneRunning !== "") {
this.scene.get(this.uiSceneRunning).scene.sleep();
}
const newScene = this.scene.get(sceneToStart);
newScene.scene.start();
this.scene.bringToTop(sceneToStart);
this.uiSceneRunning = sceneToStart;
return newScene;
} else {
return this.scene.get(this.uiSceneRunning);
}
}在我使用它的游戏中,我试图复制一个标准的选项卡接口(就像上面的Dev日志中使用类似文件文件夹的接口)。
发布于 2019-06-05 18:06:43
好的,这是交易。在位相3中,开始函数在启动新场景时实际上关闭了前一个场景。这就是为什么每次都会看到init,预加载ext。然而,如果您‘启动’您的场景,那么他们将不会通过整个关闭,重新启动序列。您可以将它们移动到顶部或底部,设置为接收输入或不接收输入等,但是要小心!从相位3.16开始,场景的睡眠或暂停不会关闭更新。因此,如果你启动一个场景,然后睡觉,它基本上只会设置标志,表示它已经睡着了,即使它真的不是。所以,任何更新处理都会在任何启动场景中继续进行。你可以在开始时用某种标志短路更新,(这就是我所诉诸的),但另一个缺点是相机的大小。因此,所有的场景都必须有相同的相机大小,否则它们会渲染(即使是“睡眠”)并扰乱您的显示。所以,说到底,在睡眠和暂停真正起作用之前,一切都会很混乱。
https://stackoverflow.com/questions/53238869
复制相似问题