泡泡龙游戏优化之先移动还是先计算

257 阅读4分钟

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

今天我们分享一下游戏中物体运动时会遇到的一个问题,这也是我在制作泡泡龙游戏时所遇到的一个问题,即到底是应该先移动后计算,还是应该先计算后移动。

图片

如图,游戏中的物体移动是一帧一帧的,即每一帧移动一定的距离,游戏通常在 1 秒钟内会执行 60 帧,所以每帧的时间是非常短的,因为人眼会有视觉停留,所以我们看到的游戏中的物体是在连续的移动,这个就是游戏中物体移动的基本原理。图中的蓝色的球在竖直的向上移动,每一帧移动 40 的距离。

接下来我们来看一下问题:假设球在 0 的位置上向上移动,每帧移动距离为 40,现在想要让球在 100 的位置停下来,该怎么处理?

图片

如图,球从 0 的位置开始移动,第一帧移动到 40 ,第二帧移动到 80,第三帧移动到 120,现在想要让球在 100 的位置停下来,有两种方案。

第一种让球先移动,在每一帧移动完成后做个判断,如果位置超过了 100,那就让球退回到 100。

第二种先计算球将要到达的位置,如果这个位置超过了 100,那就将位置设置到 100,然后再让球开始移动。

两种方案对应的过程其实是这样的。

图片

为了更直观的演示,我们直接做一个示例来看一下。

布置一个简单的场景,红球表示先运动后计算,蓝球表示先计算后运动,上方有一条目标线,游戏开始后,两个小球向上移动,到达目标线停止。

图片

先看一下红球的积木逻辑。

图片

接着再看一下蓝球的积木逻辑。

图片

这里为了便于观察两个球在到达目标位置时的移动过程,我使用了“等待1秒”积木,这样可以看到小球最后一帧的调整过程,预览一下场景,看看结果。

图片

红球越过目标位置,然后向后调整。蓝球会在目标位置前调整,然后再达到目标位置。

在泡泡龙游戏中原来使用的是先移动后计算的方式,这样带来了一个问题,就是发射的泡泡到达停靠位置时,总是有一个“先跑过后拉回”的过程,不发现还好,在发现了之后,你总是会特别关注这一过程,越看越明显,而且还为此多了一种担心,万一跑过了拉不回来了怎么办?

为了解决这种不适感,我决定对发射泡泡的移动过程进行改造,改用先计算后移动的方式。改完过后终于舒适了,再也不用担心发射的泡泡跑过头了,因为在正式移动开始之前,我们已经知道了要达到的位置。

图片

这个其实也叫计算过程前置,可以让我们有机会在移动真正开始之前,先对要达到的位置进行判断和处理,在确定好目标位置没有问题了之后,再前进。

其实所有的抽奖类型的程序,在你点击开始抽奖按钮的那一刻,结果就已经计算出来了。后续不论是何种类型的抽奖都是对于既定结果的演示而已,这就叫计算前置,所以当你下次盯着抽奖转盘的时候,心态就会平和很多。大多数时候并不是差一点点就中奖了,而是有人想让你认为差一点点就中奖了。

关于发射泡泡的移动处理大家可以参考【这篇教程】,当然那篇教程里使用的移动方式是“先移动后计算”,看了今天的文章后,不妨思考或者尝试一下,把之前的移动方式改成“先计算后移动”。


我是会做游戏也会教你做游戏的小蚂蚁,欢迎关注我的公众号【小蚂蚁教你做游戏】,学习更多与游戏开发有关的原创教程。

泡泡龙小游戏已经做出来了,欢迎前来体验。

疯狂泡泡龙射手.png

如果文章内容对你有所帮助的话,欢迎 点赞 分享,你的鼓励对我来说价值巨大,感谢!