先移动还是先计算

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

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


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


640.png


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


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


640.png


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


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


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


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


640.png


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


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


640.png


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


951f2c8ac491a07ef40e3e509d57e69f.png


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


f9b180aef7430c784e29d49b255d007a.png


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


9f63972696fb305bd2306befffce93d1.gif


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


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


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


a9cf1d2c933e09ad0f0e426388732e56.gif


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


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

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


相关文章
|
7月前
|
存储 数据处理
数据的表示及计算
数据在计算机系统中以二进制形式表示和计算。二进制是一种由0和1组成的数字系统,计算机使用二进制来表示和处理数据。
20 0
|
8月前
|
Java
使用BML进行计算
使用BML进行计算
|
5月前
|
存储 NoSQL Unix
乘法逆元的计算
乘法逆元的计算
30 0
|
6月前
|
人工智能 数据处理 云计算
刊首语|计算到底是算什么
刊首语/EDITORS' NOTE
53 0
|
12月前
|
机器学习/深度学习 算法 数据挖掘
计算GMAC和GFLOPS
GMAC 代表“Giga Multiply-Add Operations per Second”(每秒千兆乘法累加运算),是用于衡量深度学习模型计算效率的指标。它表示每秒在模型中执行的乘法累加运算的数量,以每秒十亿 (giga) 表示。
224 0
计算GMAC和GFLOPS
|
12月前
计算职工工资
计算职工工资
91 0
|
12月前
计算油费
计算油费
100 0
|
12月前
|
小程序
先移动还是先计算
嗨!大家好,我是小蚂蚁。 今天我们分享一下游戏中物体运动时会遇到的一个问题,这也是我在制作泡泡龙游戏时所遇到的一个问题,即到底是应该先移动后计算,还是应该先计算后移动。
67 0
|
消息中间件 Prometheus 监控
P99 是如何计算的?
P99 是如何计算的?