我创建了一个简单的碰撞检测脚本,其工作方式如下: 当英雄与物体之间的距离为 x 像素时,英雄可以“行走”x 像素,当他不会与物体发生碰撞时(英雄 + 3px = 无碰撞)他移动 5 像素。 但我还必须考虑帧速率,因此将他的速度乘以耗时/20 我的问题是,当某个时间的帧率非常低或很高时,他只是移动了一个额外的像素(1px)..机会非常小,但它仍然会发生。 那么我能做些什么来防止这种情况发生呢?
最佳答案
在碰撞后检查结束时添加位置校正或在碰撞前检查结束时添加速度校正。
碰撞后:物体平移回到碰撞点。
预碰撞:对象速度会暂时改变,因此在下一帧中它将处于碰撞点。
示例:
- 您的物体移动 75 像素并穿过墙壁。做什么
做?您需要 1-iteration-back 的头寸历史记录。展望
历史,你看其实是在墙后面,那么现在的
location-->它现在通过了墙 xx 像素。然后你会设置
在
绘画之前它在墙边的新位置。 - 您无法知道它什么时候会落后于您的 android:需要更好的算法使其独立于 fps。如何?您可能只是稍微暂停整个世界,直到 fps 再次稳定,或者只是在绘画之前存储接下来的几次迭代,然后在绘画之前进行计算。
关于安卓游戏开发 : Framerate & Collisions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12339636/