2D物理:存储先前位置与存储速度


9

我看到了许多2D游戏教程和书籍,其中对象的先前位置以状态而不是速度矢量存储。然后将每一帧的速度计算为位置之间的差异。

该方法的优点是什么?


2
您是否可以链接到所涉及的教程以获取上下文?
Anko 2015年

我对
Anko充满

本教程提到这称为Verlet集成。我找到了这篇文章,其中解释了Verlet的优点。基本上,更容易处理冲突和复杂的约束。
Terzalo 2015年

@Terzalo请参阅我的答案的更新版本,以了解它是否有助于理解手头特定案件的一般逻辑
MAnd15 2015年

Answers:


1

在不完全了解您已阅读的教程或书籍的情况下,我可以告诉您这些。

为了更精确地定义物理场:将向量方向计算为当前位置和最后位置之间的差。向量速度等于从一个位置转到另一个位置时所经过的时间的速度除以该速度。请参阅:http : //www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

然而,当经过时间被认为是通用的“ 1帧”,即从最后一帧到当前时,则矢量速度和矢量方向变得相同。用伪代码:

direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time

因此,总的来说,将位置存储在最后一帧中并在当前帧中获取位置的主要原因是,它可以是知道更新方向(从而更新速度)的唯一方法或最便宜的方法,即当前帧中的移动方向。

假设您将方向(甚至速度)存储在给定的帧中。在下一帧中,知道方向(甚至速度)是否已更改的唯一方法是重新计算方向。原因是在移动从一帧切换到下一帧的情况下,先前的方向或先前的速度无法让您知道当前的方向或当前的速度。

现在,考虑到您对自己的问题的评论中提到的教程,它变得更加清晰。在其中一篇教程中,作者说:

现在,让我们教粒子如何通过Verlet集成进行移动。这只是一种奇特的说法,我们将通过比较其在该帧中的位置与在其最后一帧中的位置来找出粒子运动的速度。为什么?因为这给了我们隐含的速度-粒子当前位置的任何更改都会自动更新其速度

因此,如您所见,如我上面所述,存储位置的最后一帧允许当对象(在本教程中为粒子)更改位置时,在当前帧中更新速度的计算。如果在最后一帧中保存了方向或速度,则无法轻松地更新它,以防位置从过去更改为当前帧。因此,正如您链接到的其他教程中所指出的那样,保存先前的位置可以在位置更改时自动更新速度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.