0

我试图在我的 box2d 游戏中显示特定事件的缓慢重播。此事件涉及基于生命值移动、旋转、碰撞和被破坏的对象。

我所做的是在事件开始之前存储我的世界中所有对象的状态,并在事件结束时恢复它们,以便一切都可以重新发生。由于我希望此重播更慢,因此我将传递给我的世界更新函数的实际时间的一小部分。除了碰撞处理之外,所有运动和对象都很好,并且在原始运行中被破坏的一些对象在重放中仍然存在,反之亦然。

这件事实际上可以在理论上用 box2d 正确完成还是我在浪费时间?

4

2 回答 2

1

最重要的是保持两次运行的时间步长相同。为了让它看起来很慢,您可以插入位置以进行渲染。Box2D 保留一些内部状态以帮助提高效率,我认为您不能通过将位置和速度重置回存储状态并再次运行来完全消除这一点。

如果慢动作不太长,我可能只运行一次模拟并记录每一步中所有内容的位置,然后用它来渲染慢动作和全速运行。例如,如果慢动作是 3 秒长并且您以 60fps 的速度运行,只要您想要一个慢动作场景,Step() 将世界移动 180 步(不渲染)并将所有内容的位置存储在数组什么的。然后,您可以通过以您喜欢的任何速度(向前或向后)插入阵列中的位置来渲染慢动作:) 当慢动作场景完成后,扔掉阵列并照常继续。缺点是如果你有一个很大的世界,运行 180 步可能需要相当长的时间。

于 2012-07-19T01:23:03.107 回答
0

iforce2d 是对的。进行回放的最佳方法是记录所有位置。因为即使您向 box2d 提供相同的输入,也有可能产生不同的输出。

于 2012-07-24T05:44:07.447 回答