评论

一个无需等待的世界不美吗?为什么游戏开发中需要人为的制造等待?

微信小游戏开发工具中的 3 种不同的等待积木块的使用场景和使用方法。

生活中我们总避免不了要等待,整装待发的准备去公司开始新一天的奋斗,但是公交车却迟迟不来,需要等待。一家人订好了周末出游计划,正准备出门,老婆要再选件衣服,擦个脸,需要等待。打开电视看想看的节目,出来了 60 秒的广告,需要等待……

在游戏开发的世界中我们同样的会经常需要处理等待。但是游戏开发中的等待与生活中的等待不同,生活中的等待不可避免,而游戏开发中的等待却需要我们人为的制造。

一个不需要等待的世界不美好吗?为什么还需要人为的制造等待呢?

等待直到某个条件达成时

在游戏开发中我们经常需要处理多项任务,而且这些任务之间又有依赖。举个例子,现在有两项任务需要处理,分别为任务A和任务B,两项任务同时开始进行,但是在任务B进行到一半后,需要拿到任务A执行完的结果,才能继续执行。这时候在任务B执行完一半后,就需要让它等待,直到拿到任务A执行完的结果后,任务B再接着往下执行。

接下来,我们在微信小游戏制作工具中模拟一下这样的场景。

如图,我创建了一个红球和蓝球以及一个 A 点,设想一下这样的场景,蓝球是突击部队需要向前快速进发,但是队伍的补给不足了,于是乎就呼叫了补给运送,红球就是运送补给的车,跑的比较慢,约定好补给部队行进到 A 点等待补给车,拿到补给后再继续前行。

这就是两项有依赖的任务,我们的突击队必须在 A 点等待拿到补给后,才能继续前进。

我们看一下突击队(蓝球)的逻辑。

注意其中的等待积木,等待的条件是直到红球达到A点,直到等待的条件满足后,等待才会结束。

接着看一下补给车(红球)的逻辑。

逻辑很简单,一直向右移动,达到 A 点后停止。

运行一下,看看结果如何。

蓝球先到达了 A 点,然后开始等待,直到 B 球到达 A 点后,又开始继续前进。

等待1帧

另一个在游戏开发中常用的情景是这样的:有三项任务1,2,3。我们希望这三项任务按照一定的时间顺序去执行,例如我想先开始任务2,再开始任务3,最后执行任务1。这种情况我们同样的也需要人为的制造一点儿等待,来让任务按照我们预期的时间顺序依次执行。

下面我们在小游戏制作工具中演示一下这个情景。

我在场景中加入了三个方块,代表了三个任务,每项任务的功能很简单,将自己的序号打印出来,即如果任务顺序是 1,2,3,那么下方的“默认文字”最终会显示 “123”。

看一下任务的逻辑积木块。

其他两个任务的逻辑相同,只不过拼接的序号一个为 2,一个为 3。

运行一下看看结果。

这里我们打印出了“0321”,因为全局变量“显示数字”的默认值为 0,所以拼接字符串时第一个字符显示了 0,这个我们不用考虑,看后面的任务执行结果是“321”,也就是说先执行了任务 3,然后再执行了任务 2,最后执行了任务1。

这里有一点儿需要补充的知识,就是游戏对象积木块执行时的顺序。

如图,在层级管理中,“正方形”表示任务 1,“正方形-1”表示任务 2,“正方形-2”表示任务 3,三个任务的积木同样都是在“场景启动时”执行,最终的执行顺序是3,2,1。也就是说我们的游戏在执行时,对象的积木块会按照层级管理中的顺序从下往上依次执行。

按照这样的逻辑,那么如果我想让任务 2 先执行,那么应该怎么做呢?我们只需要在层级管理中将“正方形-1”拖拽到“正方形-2”下方就可以了。

像这样,然后运行一下看看。

结果就变成2,3,1了。

这样我们就有了第一个方法:可以通过调整层级管理中的对象的顺序,来调整不同对象的积木块的执行顺序。

通常在对象数量比较少时,这是个不错的方法,但是当层级管理中的对象多了以后,可能就很难去记住到底哪个对象应该在哪个对象的下面了,这时我们就可以通过“等待 1 帧”积木,来是实现同样的效果了。

我们将顺序调整回去,按照这样的顺序,任务的执行顺序会是3,2,1。现在我们想让任务 2 先执行,接着执行任务 1,执行顺序变为 2,1,3,要怎么做呢?

只需要在任务 3 中添加一块等待积木即可。

如图,我们在任务 3 中增加一块“等待 1 帧”的积木块。

再次运行一下。

执行顺序变成“213”了,解释一下,游戏运行时是一帧一帧的运行的(如果你还不理解帧的概念,建议你先去看这篇文章把帧的概念弄明白),如果不加任何的等待积木,那么在一帧中,游戏会按照层级管理中从下往上的顺序依次执行每个对象上的积木,就是“321”,现在我们在任务 3 上增加了“等待 1 帧”积木块,那么执行顺序将会变为这样,第一帧先执行任务 3,遇到“等待 1 帧”积木,那么任务 3 的积木逻辑将会停在这里等待,接着正常执行任务 2,任务 1 的积木逻辑,打印出 2,1,第一帧执行完毕后,接着执行第二帧,再次到任务 3,此时任务 3 的“等待 1 帧”结束,继续执行其逻辑,打印出 3。所以,最终的执行是在第一帧里执行了任务 2 和 1,打印出 2,1,然后在第二帧里执行了任务 3,最后打印出 3。

等待1秒

最后,还有一个“等待几秒”钟的积木块,通常会与运动相关的积木块搭配使用,如物体移动到某个位置等待几秒钟后再移动回来等。

移动,旋转,缩放等运动积木块搭配“等待n秒”积木块可以做出一些复杂的运动效果。这里可以自行去尝试做一下各种各样的运动效果。

最后,总结一下,我们了解如下了三种等待积木块的使用场景和使用方法。

每当需要设置等待时,你就应该想起它们。

在我们的生活中,等待无法避免,但是在游戏开发的世界里,一切由你主宰,如何进行等待也将由你来定。 

文中项目已开源到社区,有需要的朋友可以自行获取。
项目地址:https://gamemaker.weixin.qq.com/#/game?game_id=lbZDVmMDkyNTgtNGYxNC00OWM1LTk3MDktMGFiOGEzYjU5ODkx


最后,欢迎试玩我的微信小游戏作品“精致1010”,一个可以等待樱花飘落,可以等待流星划过夜空的小游戏。

如果你也对微信小游戏开发感兴趣,欢迎关注我的公众号:小蚂蚁游戏开发,获取更多的游戏开发教程或者与游戏开发有关的原创内容。

最后一次编辑于  2021-08-10  
点赞 0
收藏
评论
登录 后发表内容