如何跨场景进行交互

简介: 在讲游戏场景的时候,我通常会使用这样的类比:把游戏比作一个房子,场景就是房子里的房间,通常一个房子里有多个房间,而且每个房间都互相连通,可以从一个房间进入到另一个房间。对应的就是可以从游戏中的一个场景进入到另一个场景。

嗨!大家好,我是小蚂蚁。

在讲游戏场景的时候,我通常会使用这样的类比:把游戏比作一个房子,场景就是房子里的房间,通常一个房子里有多个房间,而且每个房间都互相连通,可以从一个房间进入到另一个房间。对应的就是可以从游戏中的一个场景进入到另一个场景。

两个场景之间是可以互通的,比如说你可以从“场景1”进入到“场景2”,也可以从“场景2”进入到“场景1”。但是不同场景里的精灵和逻辑是不能够直接交互的。这也是很多同学在面对多场景时,经常遇到的困惑。为什么无法在一个场景里设置另一场景里的精灵呢?为什么给另一个场景中的精灵发送通知时,接收不到呢?

下面,让我们先来看一下这两个经常会遇到的问题。

跨场景设置精灵报错

如图,我们创建两个场景,在场景2中放置了一个“基础文字”。

接着,我们在场景1中,使用积木修改场景2中的“基础文字”。

预览场景,你会发现提示了一个错误信息。

对应的修改场景2中的“基础文字”的积木块会高亮显示。

当你在一个场景中使用积木设置另一个场景的文字,数字,精灵等操作时,就会出现这种错误。因为每个场景的精灵只能够在自己所在的场景中设置。

现在积木块点击下拉时,会显示所有场景中的可设置的精灵,比如说,点击基础文字设置积木的下拉,会显示所有场景中的基础文字。如果工具在这里能增加一个限制,即只显示当前场景中的基础文字,那这个错误就能够在工具的层面上完全解决了。期待小游戏制作工具日后的改进升级。

跨场景发送通知无效

如图,我们在场景2的“基础文字”上增加了一个通知的处理,当它收到“修改文字”的通知时,修改一下自己的文字内容。

接着,我们在场景1中给场景2的“基础文字”发送一个“修改文字”的通知,然后将场景切换到场景2。

预览一下:

场景2中的基础文字并没有改变。这证明我们在场景1中向场景2发送的通知并没有生效,而且也没有给出明显的错误提示。

当你在一个场景中向另一个场景中的精灵发送通知时,会遇到这种没有明显提示的问题,通知只有在发送给当前场景中的精灵时才会有效。

跨场景交互

我们既不能去设置其它场景的精灵,又不能向其它的场景发送通知,那两个场景之间想要交互的话如何做呢?答案就是“全局变量”。

如图,全局变量是一个公共区域,每个场景都可以读取和设置全局变量。两个场景之间可以借助全局变量来进行互动。举个例子,假设现在有一个全局变量 a,它的值是 0,当前在场景1中,我们把这个 a 的值设置成 1,接着切换到场景2中,此时场景2获取到的 a 的值就是 1 了。

全局变量相当于一个中介的角色,可以在一个场景中记录某个值,然后在另一个场景中把这个值拿出来用。

接下来,我们以一个小示例来演示一下,如何使用全局变量来进行两个场景间的交互。

我们制作一个游戏中常用的选角色的示例,在选人场景(场景1)中玩家选择一个角色,然后进入游戏场景(场景2)后,会使用玩家选择的这个角色进行游戏。

首先,来看一下选择角色场景。

如图,场景1是角色选择场景,在这里玩家可以选择角色,选择的角色使用红色放大作为提示,点击“开始游戏”按钮,会进入游戏场景。

创建一个“当前角色”的全局变量,以及一个“刷新角色”的通知。

接着,看一下小Y上的积木逻辑。

点击小Y时,设置全局变量“当前角色”的数值为 1,然后向所有的角色发送“刷新角色”的通知。通知中的处理是根据“当前角色”变量的值,设置当前的角色是否要红色放大显示。

再来看一下小怪兽上的积木逻辑。

逻辑都差不多,唯一的区别就是,选择小怪兽时,“当前角色”的数值设置为 2。

最后,在来看一下场景2中的积木逻辑。

逻辑很简单,当场景启动后,根据变量“当前角色”的值显示游戏的角色。“当前角色”的值为 1 的时候,显示小Y,为 2 的时候,显示小怪兽。

预览一下看看结果。

最后,总结一下。

跨场景交互经常会遇到两个问题:

  • 在一个场景中设置另一个场景中的文字,数字,精灵等,会报错。
  • 在一个场景中向另一个场景中的精灵发送通知时,不会报错,但是通知无效。

对于这两个问题,只需要记住一点:不论是对精灵进行设置,还是给精灵发送通知,只有在同一场景下才有效,跨场景无效

跨场景交互的解决方法是利用“全局变量”,它是游戏这座房子里的一块公共区域,是一个中介。每个场景都可以与它交互,利用它我们就可以实现多个场景间的信息传递了。

今天的这篇文章源自我为学员编写的【知识卡片库】,一个知识卡片解决一个问题,搭配一个示例。目前这样的知识卡片已经累计到了 90 个,配合搜索功能,用起来非常方便。这些知识卡片正在帮助越来越多的学员快速的解决问题,以及更好的学习。

【知识卡片库】是学习服务中的一项,更好的课程,更多的学习服务,有良好氛围的学习社群,一年不限次数的咨询,尽在一份小蚂蚁的游戏开发课程服务,欢迎加入,来与 134 位同学,一起学习做游戏。【点击这里】了解课程服务详情。

我是会做游戏也会教你做游戏的小蚂蚁,想学习做游戏的话,关注我的公众号就对啦!



这里是小蚂蚁的小游戏系列,闲暇之余希望能给你带来片刻的放松和愉悦。无需下载安装,点击下方的游戏卡片就可以直接玩啦!









也欢迎加个微信,交个朋友,朋友圈每日分享与做游戏有关的知识和内容,可以来围观。备注“学习做游戏”可免费领取学习做游戏的原创教程资料。接受付费咨询,不闲聊,望见谅。

相关文章
【QT】创建、打开QT项目只显示.pro文件的问题解决
【QT】创建、打开QT项目只显示.pro文件的问题解决
3893 0
|
存储 JavaScript 安全
使用minio搭建自己的文件存储服务(新版和旧版)
前言 在一个实际的项目中,文件存储是必不可少的。目前市场上有许多提供对象存储服务的厂商,比如七牛云、阿里云等等。但是这些存储服务往往是收费或者有存储空间限制的,或者有一些小伙伴会直接把上传的文件存储在服务器本地,虽然这种方式可行,但是还是有很多局限性,比如我们上传的文件不好管理,文件预览不好操作以及如果有多个服务器等等。 今天就介绍使用minio搭建自己的文件存储服务器,因为minio新版和旧版有一定的区别,所以今天介绍minio新版和旧版的搭建方式,大家可以根据自己的需求选择。
3261 0
使用minio搭建自己的文件存储服务(新版和旧版)
|
6月前
|
JavaScript 数据可视化 Docker
简易制作MCP服务器并测试
本文介绍了如何简易制作并测试MCP服务器,包括环境搭建、代码实现及Docker部署。首先通过uv包创建项目,在main.py中定义MCP服务器及其工具和资源函数。接着详细说明了在Windows上安装uv、配置Docker镜像加速、生成requirements.txt文件以及编写Dockerfile的过程。最后,通过构建和运行Docker容器部署MCP服务器,并使用Node.js工具测试其功能,确保服务器正常工作。此教程适合初学者快速上手MCP服务器的开发与部署。
2535 63
|
11月前
|
安全 关系型数据库 Linux
什么叫网站国产化改造?哪些CMS符合国产化标准?
国产化需求在未来的互联网话题上是只会越来越多、越来越重要的,这个国产化改造不单单针对网站项目上,还会逐步涉及到各大软件和系统上,所以,相关的单位提前了解国产化的改造标准和需求,到传达的时候、不会显得出手无策。
680 5
|
传感器 算法
控制系统稳定性常见策略
控制系统稳定性常见策略
489 0
|
弹性计算 关系型数据库 数据库
利用阿里云进行性能优化:实践案例分享
在开发在线教育平台过程中,我们遇到了由于用户访问量增加而导致的性能瓶颈问题。通过使用阿里云的多种服务,包括RDS数据库、ECS弹性扩展、SLB负载均衡、OSS存储和CDN加速,我们对数据库、应用服务器和静态资源加载进行了全面优化。优化后的系统性能显著提升,数据库查询速度提高了60%,服务器负载下降了40%,静态资源加载时间减少了70%,从而极大改善了用户体验。本文详细介绍了问题分析、具体解决方案及其实施效果,旨在为其他开发者提供有价值的参考。
498 3
|
数据采集 监控 大数据
大数据中的ETL过程详解
【8月更文挑战第25天】ETL过程在大数据中扮演着至关重要的角色。通过合理设计和优化ETL过程,企业可以高效地整合和利用海量数据资源,为数据分析和决策提供坚实的基础。同时,随着技术的不断进步和发展,ETL过程也将不断演进和创新,以更好地满足企业的数据需求。
|
缓存 前端开发 JavaScript
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第10天】在Web开发中,Web Workers和Service Worker提升性能。Workers运行后台任务,防止界面冻结。Web Workers处理计算密集型任务,Service Worker则缓存资源实现离线支持。常见问题包括通信故障、资源限制、注册错误及缓存更新。通过示例代码展示了两者用法,并强调生命周期管理和错误处理的重要性。善用这些技术,可构建高性能的Web应用。
318 0
|
人工智能
MidJourney以图生图的详细教程(含6种案例介绍)(下)
MidJourney以图生图的详细教程(含6种案例介绍)
h5+JavaScript实现一个倒计时功能
h5+JavaScript实现一个倒计时功能