1

我创建了一个简单的碰撞检测脚本,它的工作方式是:当英雄和物体之间的距离为 x 像素时,英雄可以“走”x 像素,而他不会与物体发生碰撞(英雄 + 3px =没有碰撞)他移动了 5 个像素。但是我还必须考虑帧率,因此将他的速度乘以经过的时间/20 我的问题是,当某个时间的帧率非常低或高时,他只会移动一个额外的像素(1px)......机会是非常小,但它仍然可能发生。那么我能做些什么来防止这种情况呢?

4

1 回答 1

1

在碰撞后检查的末尾添加位置校正或在碰撞前检查的末尾添加速度校正。

碰撞后:物体被平移回碰撞点。

预碰撞:物体速度会暂时改变,因此在下一帧中它将处于碰撞点。

例子:

  • 您的对象移动 75 个像素并穿过墙壁。该怎么办?您需要 1-iteration-back 的位置历史记录。查看历史,您会看到它实际上是在墙后面,然后是当前位置-->它现在经过墙 xx 像素。然后,您将在壁画旁边设置它的新位置before
  • 您无法知道它何时会落后于您的 android:需要更好的算法使其独立于 fps。如何?您可能只是暂停整个世界,直到 fps 再次稳定,或者在绘画之前存储接下来的几次迭代,然后在绘画之前计算事物。
于 2012-09-09T14:13:52.063 回答