Phaser3 场景过渡

2024-03-24

我是新来的Phaser3在开始一个疯狂的项目之前,我想知道我应该如何开始,在场景之间切换。我看到有几个函数,启动、启动、切换、运行、恢复、暂停等。

例如,假设我想要 2 个场景,一个菜单和一个游戏。我在菜单上启动,我想进入游戏场景,如果我单击按钮,然后返回菜单场景。

我通过调用 start 函数实现了这一点,但我注意到所有,init, preload and create每次都会调用函数,因此我会加载所有图像,一遍又一遍地设置所有侦听器。

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

提前致谢。


这个问题可能有点太宽泛,但考虑到 Phaser 3,它仍然取决于您的菜单的用途。

我认为大多数游戏都有一个主菜单,一般会在游戏第一次启动时调用,然后就不会再次调用。

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

随着 Phaser 3 对多场景的支持 - 与开发日志 #119 https://phaser.io/phaser3/devlog/119 and 开发日志#121 https://phaser.io/phaser3/devlog/121可能是当前最好的信息源 - 另一种选择是在当前场景中启动一个新场景来处理这个问题。

但是,如果这实际上只是 UI,那么没有什么可以阻止您创建叠加层,而不是生成整个场景。

如果您担心性能,我可能会考虑是否需要调用整个菜单,或者简化的菜单是否可行。另外,请确保在进入菜单和主游戏之前预加载资源。

我个人使用“启动”>“预加载器”>“启动画面”>“主菜单”>“主游戏场景”,其中预加载器加载了我需要的大部分资源。这样做的缺点是初始负载较长,但优点是此后负载最小。

场景转换

我如何处理这些我的入门模板 https://github.com/JamesSkemp/phaser-starter-templates/tree/master/v3就是在创建场景时将场景添加到场景管理器中。然后我过渡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);
    }
}

在我使用它的游戏中,我试图复制一个标准选项卡界面(就像上面的开发日志中看到的类似文件夹的界面)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Phaser3 场景过渡 的相关文章

  • 如何在移动设备的 Facebook 即时游戏中创建 Phaser 按钮

    我正在尝试在移动设备上使用 Phaser 2 CE 创建一个按钮 但它不会触发 即使它在桌面上运行良好 整个代码也会打开我的 github 存储库但目前我只能显示一个图像 如下面的代码所示 var game new Phaser Game
  • 如何将 char 变量设置为 Input.GetKey 的 KeyCode?

    我正在尝试制作一个作弊代码系统 我有一个字符数组 我想将玩家输入的任何输入分配给该字符 然后将索引更改为下一个字符并重复该操作 最后 我想将所有字符组合成一个字符串 看看这是否是作弊代码 如果是的话 那么玩家将获得加电或其他什么 我基本上希
  • Matter.js 物理引擎的结果总是不同

    我在 Matter js 物理引擎中创建了一个简单的动画 其中有一些物体碰撞并掉落在地上 我注意到结果总是有点不同 你可以在这里看到 https jsfiddle net 95urgeqf 1 var Engine Matter Engin
  • 无法在不扰乱重力的情况下翻转球的方向

    我正在制作一款类似乒乓球的游戏 只不过只有一个球拍并且球以抛射运动移动 目标是让球尽可能长时间地在球拍上弹跳 当球被球拍击中时 y其速度分量的符号翻转 问题是重力也作用在球上 因此当球向上击打时 由于重力的反向作用 球会加速 这是球类的代码
  • 2D 软体:凝胶状和可塑性?

    我正在使用 Matter js 物理学来尝试创建软体 我能够创建这样的身体 但我不确定这是否是我想要的 软体 确实 这个物体并不完全是刚性的 并且在碰撞和被拖动时具有弹性的感觉 我一直在寻找与凝胶有相似之处的身体 这张图片可能在视觉上有助于
  • 收集硬币并添加到 Sprite Kit 中的分数标签

    我正在尝试使用本教程作为参考 在我的游戏中实现一个简单的评分系统 http www raywenderlich com 87232 make game like mega jump sprite kit swift part 2 http
  • 如何在 C/C++ 中以编程方式查找“Saved Games”文件夹?

    我正在写一个游戏 我计划将保存存储在 保存的游戏 目录中 如何以编程方式查找 已保存游戏 文件夹的位置 它需要在非英语 Windows 上运行 黑客喜欢 USERPROFILE Saved Games不是一个选择 保存的游戏目录可以通过SH
  • 如何扩展 Phaser 3 游戏及其资产以使其在智能手机和平板电脑上运行?

    我刚开始使用 Phaser 3 和 Apache C rdova 创建移动 Android 游戏 我创建了一个 1200 x 800 像素的游戏 它在平板电脑上看起来不错 但在智能手机上却不然 如何缩放它以适应多种屏幕尺寸 此外 我需要帮助
  • Unity:Android 上的 FPS 随机下降到接近零(提供了很多线索)

    首先感谢您花时间查看此内容 我们感谢您的任何意见 关于我们现在面临的问题 在过去的几个月里 我们在 Android 上的游戏应用程序中遇到了随机 fps 下降到接近于零的情况 并且到目前为止尚未成功调试该问题 它在完全随机的时间发生 有时在
  • 在 Phaser 3 中使用图块地图时,如何阻止图块渗色?

    在 Phaser 3 中添加图块地图时 图块之间存在明显的出血 或间隙 这有时被描述为瓷砖的 闪烁 或 闪烁 这在平移时通常更为突出 const map this make tilemap key some map const tiles
  • touchDragged 在 libgdx 中如何工作?

    我目前正在学习libgdx游戏编程 现在我已经学会了如何使用touchDown 但我不知道如何使用touchDragged 计算机如何知道手指被拖动的方向 用户是否向左或向右拖动 计算机不知道这一点 或者至少界面不会告诉你这个信息 它看起来
  • 如何将场景缩放至全屏?

    我目前正在学习 Phaser 3 但是 我能找到的所有文档都是关于 Phaser2 的 创建游戏时 您必须在配置中设置宽度和高度 var config type Phaser AUTO width 800 height 600 如何将场景缩
  • 如何在 Roblox Studio 中优化 If 语句的过度使用

    此代码的目标是在 5 个预设位置之一随机生成一个球 GlowyBall 当玩家点击按钮时 该脚本就会激活 球还需要随机生成 3 种颜色中的一种 该代码在大部分情况下都有效 但在优化该代码时我遇到了困难 我不知道应该甚至可以使用哪种数据类型来
  • Phaser3 场景过渡

    我是新来的Phaser3在开始一个疯狂的项目之前 我想知道我应该如何开始 在场景之间切换 我看到有几个函数 启动 启动 切换 运行 恢复 暂停等 例如 假设我想要 2 个场景 一个菜单和一个游戏 我在菜单上启动 我想进入游戏场景 如果我单击
  • Java JProgressBar 使用图像

    我正在用 Java 制作一个游戏 并且我正在使用JProgressBar为了健康吧 我想使用图像 而不是颜色 JProgressBar 但我一直没能做到 我尝试过使用绘画方法 paintComponent方法 创建一个新类 但它不起作用 有
  • 编辑器中的 Unity 模糊和像素化精灵(无像素艺术)

    我目前正在 Unity 中制作一款类似移动三消游戏 我已经在 Inkscape 中以 256x256 制作了宝石 用于匹配的对象 的所有图形 并以 90 dpi 导出它们 PNG 文件 也尝试使用 360 但没有任何改变 我的问题是 当我在
  • HTML 将 Phaser 移动到容器 div 中

    目前正在 Phaser 中制作一个基于浏览器的游戏并尝试将其添加到容器中div我创建的标签 但是移相器似乎将自身推到容器下方div 两张截图对比 http gyazo com 3cc9b9333cf89d7fc879bd2cdc741609
  • 像随机关卡生成一样自由流动,只有一种可能的解决方案?

    我已经实现了在这个问题中标记为正确答案的算法 流畅类游戏随机关卡制作用什么 https stackoverflow com questions 12926111 what to use for flow free like game ran
  • 如何检查单个精灵帧期间的重叠情况?并在玩家与帧重叠的每个循环中仅从玩家生命值中减去 1?

    我有一个尖峰精灵 其循环中有 4 个帧 当玩家与尖峰精灵的第三帧重叠时 我想从健康变量中减去 1 目前 on 函数无法正确加载 我的游戏可以运行 但重叠功能根本无法运行 我编辑了收到的代码 并删除了我认为不需要的方面 测试了原始代码示例以检
  • 在 Phaser3 中从 Multiatlas 加载文件时出错

    尝试使用 Phaser 和 TexturePacker 中的多图集功能 出现此错误 VM32201 1 GET http localhost 8080 bg sd json 404 Not Found Texture js 250 Text

随机推荐

  • (节点:11684)[DEP0062] 弃用警告:`node --inspect --debug-brk` 已弃用。请改用“node --inspect-brk”

    自从升级 NodeJs 以来 我从 Visual Studio 2017 运行 Nodejs 时收到此错误 断点也不起作用 有任何解决这个问题的方法吗 笔记 VS版本是15 5 6 NodeJS 版本 8 9 4 我遇到了同样的问题 以下内
  • 获取重载静态函数的地址[重复]

    这个问题在这里已经有答案了 可能的重复 如何指定指向重载函数的指针 https stackoverflow com questions 2942426 how to specify a pointer to an overloaded fu
  • 验证 Docker 容器中运行的 ubuntu 版本

    我在 Windows 8 1 上安装了 Docker Toolbox 并且正在创建基于 ubuntu latest 应该是 16 04 的映像 我想确保我的应用程序确实在 16 04 上运行 这是我的 Dockerfile FROM ubu
  • 在 HTML5 应用程序中使用 XML 文件中的数据?

    我有一些 XML 文件 当前用于将数据加载到 Adob e Flex 应用程序中 我正在尝试制作该应用程序的 HTML5 版本 并且我需要将相同的数据加载到 html 应用程序 中 以便我可以像在 Flex 中一样使用和操作 我已经搜索过
  • 无法使用 System.XML.Linq

    我正在开发一个使用 Mono for Android 的项目 在阅读了 Xamarin 的跨平台文档后 我将数据层放在一个单独的项目中 打算将其移动到我的 Mono for Android 项目 然后将这些文件链接到我的 Mono Touc
  • prop 类型在 React 应用程序中不起作用

    我正在尝试在我的react redux应用程序中使用proptypes 但它不起作用 或者我做错了什么 这是代码示例的结尾 LoginPage propTypes login form PropTypes string function m
  • Android 延迟通知

    我正在尝试使用 Android 的通知管理器创建通知 但是 诀窍是我希望通知在未来 30 天后显示 在我的代码中我正在这样做 Intent notificationIntent new Intent this MyClass class P
  • 使用winsock2和IOCP替换Delphi TClientSocket?

    有这样的事吗 它需要是异步的 没有 Indy 尝试 HPScktSrvr http www terry net pages php id 220 939383 http www torry net pages php id 220 9393
  • 哪个 Javascript 函数库:Underscore 或 wu.js 或Functional 或...? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何获取模型属性的 id 以与 MVC3 中的自定义 IClientValidatable 一起使用

    我正在尝试编写一个自定义验证属性 该属性将有条件地需要基于模型布尔属性的字段 我的属性实现了 IClientValidatable 我有要检查的属性名称 但我不知道如何获取目标属性的客户端 ID public IEnumerable
  • Automapper - 字典到对象映射不起作用?

    我正在尝试将字典转换为对象 我已经尝试过以下方法 但它不起作用 public class FormField public string FieldName get set public string FieldValue get set
  • 服务器端表使用 JS、Php 或 Ajax 从表(但不是数据库)中删除行

    项目链接 https databasetable net 000webhostapp com https databasetable net 000webhostapp com 以下代码正确删除表中的一行 example on click
  • LoadInst 和 StoreInst 值和地址 LLVM

    我有一个文件 print c 它有两个功能 void printLoad print address and value of memory location from which value printf address value vo
  • Java - SpringMVC - 获取控制器中的参数

    我在将对象保存到数据库中时遇到问题 我有一个与配置文件具有多对一关系的用户 我的 JSP 刚刚添加了一个新用户 因此 JSP 包含字段和具有所需配置文件的组合框 问题是 当我运行程序时 即使我在组合框中选择了一个配置文件 属性 user p
  • Flutter:google_sign_in 插件 MissingPluginException

    我试图让谷歌登录插件正常工作 但没有成功 我已将其放入我的 pubspec yaml 并运行 flutter packages get 但仍然没有运气 抛出以下异常 E flutter 3313 ERROR lib tonic loggin
  • “有一个”和“是一个”是什么意思? [复制]

    这个问题在这里已经有答案了 谁能解释一下两个类之间的 HAS A 和 IS A 是什么意思 举个例子会有帮助 汽车是 车辆 汽车有一个方向盘 Eg class SteeringWheel class Vehicle virtual void
  • 集合中项目的总和

    使用 LINQ to SQL 我有一个包含 OrderDetails 集合的 Order 类 订单详细信息有一个名为 LineTotal 的属性 它获取 Qnty x ItemPrice 我知道如何对数据库进行新的 LINQ 查询来查找订单
  • iOS 内部分发由外部供应商开发的应用程序

    第三方开发了一款供我们企业环境中私人使用的应用程序 现在是时候分发它了 但他们不想向我们发送他们的代码 我感觉这会导致问题 因为分发配置文件和证书必须发送给他们 从而损害我们的私钥 这是我们不允许的 这是正确的吗 或者可以在不泄露我们的私钥
  • 如何从 PowerShell 模块导出变量

    我在a中定义了一个变量psm1文件 但是当我尝试在另一个脚本中访问它时 导入模块后 我没有看到在psm1 file 全局变量 psm1 blah hello world 我的脚本 ps1 Import Module PSScriptRoot
  • Phaser3 场景过渡

    我是新来的Phaser3在开始一个疯狂的项目之前 我想知道我应该如何开始 在场景之间切换 我看到有几个函数 启动 启动 切换 运行 恢复 暂停等 例如 假设我想要 2 个场景 一个菜单和一个游戏 我在菜单上启动 我想进入游戏场景 如果我单击