如何跨场景进行交互

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

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

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

两个场景之间是可以互通的,比如说你可以从“场景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 位同学,一起学习做游戏。【点击这里】了解课程服务详情。

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



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









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

相关文章
|
2天前
|
前端开发 JavaScript 安全
开源一款剪贴板跨设备共享工具
`shigen`,编程博主,擅长多种语言,近期自制了一个名为`copyhub`的工具,用于局域网内跨设备同步剪贴板。设计灵感源于对现有共享工具的安全顾虑,采用`Flask`和`Redis`实现,前端直接HTML+JS,简化架构。用户通过取件码交换内容,不涉及复杂功能。代码已开源并在个人腾讯云服务器上部署。更多详情见shigen的GitHub和哔哩哔哩频道。一起探索,每天进步!
39 1
开源一款剪贴板跨设备共享工具
|
5月前
|
存储 前端开发 安全
跨页面通信的方式有哪些?
跨页面通信的方式有哪些?
58 0
|
8月前
|
Web App开发 前端开发 JavaScript
跨浏览器兼容性:确保您的网站在各个平台上无缝运行
在当今多样化的网络浏览器市场中,确保您的网站能够在不同浏览器上正常运行变得至关重要。跨浏览器兼容性是一项关键任务,涉及到确保您的网站在不同浏览器和设备上都提供一致的用户体验。本博客将深入探讨跨浏览器兼容性的重要性、挑战以及如何实施有效的兼容性策略。
80 0
|
8月前
|
消息中间件 存储 缓存
如何设计各个组件之间的交互行为?
如何设计各个组件之间的交互行为?
|
2天前
|
存储 移动开发 API
本地跨页面通讯
本地跨页面通讯包括Web Storage、Cookies、Broadcast Channel API、SharedWorker和postMessage API等方法。Web Storage和Cookies用于存储数据共享,Broadcast Channel API提供消息通道,SharedWorker支持多页面共享后台线程,postMessage用于不同窗口或页面间的消息传递。根据项目需求选择合适的技术,可实现高效通信。
|
2天前
|
存储 监控 负载均衡
|
2天前
|
数据可视化 JavaScript 前端开发
基于数据源驱动的跨组件通信最佳实践(低码篇)
基于数据源驱动的跨组件通信最佳实践(低码篇)
29 0
|
2天前
|
存储 前端开发 安全
无限连接:前端跨页面通信的实现与应用
在前端开发中,有时我们需要在不同的页面之间进行数据传递和交互。这种场景下,前端跨页面通信就显得尤为重要。前端跨页面通信是指在不同的页面之间传递数据、发送消息以及实现页面间的交互操作。本文将详细介绍前端跨页面通信的属性、应用场景以及实现方法,并提供一些代码示例和引用资料,帮助读者深入了解并应用这一重要的技术。
|
2天前
|
存储 JavaScript 前端开发
跨标签页通信的8种方式(下)
跨标签页通信是指在浏览器中的不同标签页之间进行数据传递和通信的过程。在传统的Web开发中,每个标签页都是相互独立的,无法直接共享数据。然而,有时候我们需要在不同的标签页之间进行数据共享或者实现一些协同操作,这就需要使用跨标签页通信来实现。
66 0
|
2天前
|
存储 缓存 JavaScript
跨标签页通信的8种方式(上)
跨标签页通信是指在浏览器中的不同标签页之间进行数据传递和通信的过程。在传统的Web开发中,每个标签页都是相互独立的,无法直接共享数据。然而,有时候我们需要在不同的标签页之间进行数据共享或者实现一些协同操作,这就需要使用跨标签页通信来实现。
62 0