碰撞检测代码工作后如何反弹物体?

时间:2011-06-02 15:47:20

标签: c# xna collision-detection game-physics

最近我刚刚阅读了XNA 4.0 Game Developmeny by Example。在本章的其中一章中,编写了这段代码,用于在碰撞检测后反弹(反映)对象:

private void BounceAsteroids(Sprite asteroid1, Sprite asteroid2)
{

    Vector2 cOfMass = (asteroid1.Velocity + asteroid2.Velocity) / 2;
    Vector2 normal1 = asteroid2.Center - asteroid1.Center;
    normal1.Normalize();
    Vector2 normal2 = asteroid1.Center - asteroid2.Center;
    normal2.Normalize();

    asteroid1.Velocity -= cOfMass;
    asteroid1.Velocity = Vector2.Reflect(asteroid1.Velocity, normal1);
    asteroid1.Velocity += cOfMass;

    asteroid2.Velocity -= cOfMass;
    asteroid2.Velocity = Vector2.Reflect(asteroid2.Velocity, normal2);
    asteroid2.Velocity += cOfMass;
}

任何人都可以用一些图表或一些容易可视化的例子向我解释这段代码。我无法将此代码可视化。如果有人知道我可以学习这种对游戏编程有用的物理类型的书,那么我也将非常感激。

1 个答案:

答案 0 :(得分:2)

这是试图模拟反弹。

标准化和中心计算使得斑点在边缘接触时开始弹跳,而不是当它们的中心可能会碰到时。

然后根据涉及每个小行星质量的一些计算来改变速度。

反射功能毫无疑问会计算出某些角度,因此事情会朝着正确的方向发展。