Phaser3场景转换[英] Phaser3 Scenes transitions

问题描述

我是 phaser3 的新手,在开始一个疯狂的项目之前,我想知道我应该如何开始,在场景之间切换.我看到有几个功能,启动,启动,开关,运行,恢复,暂停等

示例,可以说我想拥有两个场景,一个菜单和一个游戏.我在菜单上启动,我想进入游戏场景,如果我单击一个按钮,然后回到菜单场景.

我通过调用开始功能来实现这一目标,但是我注意到所有init,preload和create函数每次都调用,因此我正在加载所有图像,设置所有图像一遍又一遍地听众.

这似乎是错误的,我应该使用启动或切换功能以及暂停和恢复吗?但是如何隐藏上一个场景?

预先感谢.

推荐答案

这个问题可能有点太宽了,但是考虑到Phaser 3,它仍然取决于您的菜单服务的目的.

我认为大多数游戏都有一个主菜单,当游戏首次启动时通常会称呼,然后再被称为.

如果这是游戏中的菜单,可以更改设置或可以重新设置游戏的一部分,那么重定向到完全不同的场景可能没有意义.

在Phaser 3对多个场景的支持下 - 带有 dev log#119 dev log#121 可能是最新的信息来源 - 另一个选项是在内部启动新场景,当前处理此操作的场景.

但是,如果这真的只是UI,没有什么可以阻止您创建覆盖层,而不是产生整个场景.

如果您担心性能,我可能会考虑是否需要调用整个菜单,或者简化的菜单是否可行.另外,请确保您在菜单和主游戏中预装资产.

我个人使用启动>预加载器> 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);

然后,我只是按需要保留下一个场景.

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日志中看到的使用文件夹一样的接口).

其他推荐答案

好吧,这是交易.在Phaser 3中,启动函数实际上关闭了上一个场景,因为它开始了新的函数.这就是为什么您每次都会看到初始化,预计.但是,如果您"启动"了您的场景,那么它们将不会通过整个关闭,重新启动序列.您可以将它们移至顶部或底部,设置为未接收输入,等等.但是,请注意!截至移动器3.16,场景的睡眠或停顿不会关闭更新.结果,如果您启动场景,然后睡觉,它基本上除了设置旗帜外,没有其他作用,说它已经睡着了,即使它确实不是.因此,任何更新处理都将在任何启动场景中继续进行.您可以在开始时用某种标志的标志短路(这就是我求助于的),但另一个陷阱是相机尺寸.因此,所有场景都必须具有相同的相机尺寸,否则它们将渲染(即使"睡觉")并弄乱了您的显示屏. 因此,最重要的是,直到睡眠和停下来实际上工作.

本文地址:https://www.itbaoku.cn/post/1740217.html