如何计算加速后静息物体(AABB)之间的新速度?

最近我一直在试图用Direct2D在C ++中创建一个2D平台游戏引擎。 我现在遇到的问题是,在加速度比如重力加速度之后,让相互靠在一起的物体正确地相互作用。

现在我可以检测到碰撞并正确回应(我认为),当物体碰撞时,他们会记住他们正在靠着的其他物体,所以物体可以被其他物体推动(注意碰撞时没有弹跳,所以当物体碰撞,他们保证rest,直到其他事情发生)。 每次模拟进行时,物体的加速度将应用于其速度(例如vx + = ax * t,其中t是自上次前进以来所经过的时间)。

在应用这些加速度之后,我想要检查是否有任何相互靠在一起的物体以不同的速度移动(因为不同的物体可能有不同的加速度),并且根据这种差异或者将这两个物体断开连接,使它们不是更长的rest时间,甚至速度,所以他们再次以相同的速度移动。 我无法创建一个可以在许多静止对象上执行此操作的algorithm。

这是帮助解释我的问题的图表

http://i.imgur.com/cYYsWdE.png

首先,我对你的图表有些怀疑。 箭头代表速度vector吗? 如果是这样,当你说对象是“rest”时,即使“群”以相同的速度移动,你是否意味着它们正在彼此rest?

那么,除此之外,从你的示例图(我将从左到右称为A,B,C和D的块)我理解如下:

  • 开始时所有的街区都连接在一起,以相同的速度向右移动;
  • 对方块B施加一个向右的附加力量;
  • 这导致块A和B之间的连接被断开,也使得块A恢复远离新的“组”(由块B,C和D构成)的速度向量。

由于你的问题是关于如何创建一个algorithm来处理这些变化,我的建议是创建一个连接块之间的组合,以真正创建一个组(如果他们是磁性附加)。 例如,使用复合材料devise模式将块连接在一起,以便在将力施加到组中的一个特定块时,可以遍历它们。 如果你的组结构存储有关相对位置的信息(它可以简单地是列表中的索引位置),那么你可以拆分组,并从施加力的块中向左/向右恢复子组的速度自然而然地根据所施加的力量的方向)。