不同机器下,游戏编程如何保证物体移动具有相同的速度
2016-08-11 14:14
330 查看
在游戏编程里,为了实现物体平滑的移动,我们会在Tick里使用位移函数,使得物体在空间中得以移动,例如:UE4中的AddActorLocalOffset函数等,但是,这会有一个问题,每台机器的性能不同,造成了相同的代码在不同的机器上运行完一个Tick的时间也就不同,此时,不同机器间的FPS就会不同,那么造成的后果就是不同机器下,物体位移的速度就不同,如何解决这个问题呢?
其实这个问题可以用数学的方法进行解决,问题用形式化语言表达则是,在不同的δt(每一个Tick的运行时间)下,在相同的时间t内,要让不同机器下的物体位移X相同,即位移的平均速度v相同。可以列出(1)式,其中的δx是我们可以在Tick中设置的每一帧进行的位移:
![](https://img-blog.csdn.net/20160811135258691?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(1)
通过进一步分析我们可以知道,t/δt 是 时间t内运行的帧数,这是我们不能控制的量,我们需要想办法根据不同机器下来调整δx使得等式恒成立,直观来说,运行速度快的机器,每秒帧数高,那么每个帧分到的位移就要小。而我们知道,而δx=v*δt ,其中v就是位移的平均速度,v在等式两边都是相等的。则(1)式可变为(2)式:
![](https://img-blog.csdn.net/20160811135213550?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(2)
那么,到这个地方我们就可以看到了解决问题的办法,我们把不同机器下的δt 与固定的 v 相乘的结果作为 δx的输入,这样就可以实现在不同机器下物体移动具有相同的速度了。
其实这个问题可以用数学的方法进行解决,问题用形式化语言表达则是,在不同的δt(每一个Tick的运行时间)下,在相同的时间t内,要让不同机器下的物体位移X相同,即位移的平均速度v相同。可以列出(1)式,其中的δx是我们可以在Tick中设置的每一帧进行的位移:
(1)
通过进一步分析我们可以知道,t/δt 是 时间t内运行的帧数,这是我们不能控制的量,我们需要想办法根据不同机器下来调整δx使得等式恒成立,直观来说,运行速度快的机器,每秒帧数高,那么每个帧分到的位移就要小。而我们知道,而δx=v*δt ,其中v就是位移的平均速度,v在等式两边都是相等的。则(1)式可变为(2)式:
(2)
那么,到这个地方我们就可以看到了解决问题的办法,我们把不同机器下的δt 与固定的 v 相乘的结果作为 δx的输入,这样就可以实现在不同机器下物体移动具有相同的速度了。
相关文章推荐
- 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了
- Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同,如何保证JAVA MD5加密结果在不同的环境下都相同
- 算法--MD5--如何保证MD5加密结果在不同的环境下都相同
- 控制精灵以相同的速度在不同设备上移动
- 控制游戏中物体的移动速度
- 如何保证MD5加密结果在不同的环境下都相同
- Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同,如何保证JAVA MD5加密结果在不同的环境下都相同
- 控制游戏中物体的移动速度
- 控制游戏中物体的移动速度
- 基于Java的移动游戏开发入门-Java基础-Java-编程开发
- 即时战略游戏中如何协调对象移动
- 如何在两台不同的机器上安装配置ArcSDE (oracle)
- 即时战略游戏中如何协调对象移动
- ArcSDE同一版本的数据库如何在不同的机器上部署
- DUPLICATE数据库到不同的机器时要将备份文件放于相同目录。
- 如何用cocos2d-x来开发简单的Uphone游戏:(二) 移动的精灵
- 多域名指向相同的虚拟主机如何设置使用不同的首页
- 如何高效的对可移动物体进行四叉树管理
- HOWTO:如何解决 您无法镜像另一个具有不同分区形式的磁盘上的当前启动卷
- 构造前缀碰撞法可制作两个内容不同但具有相同MD5验证码的文件