我尝试创建一个简单的基于物理的“游戏”,你可以在那里产生球,然后它们会受到不同的自然力量的影响,如重力。
但是我有一个问题,当球到达地板时,它会不断受到重力的影响。它有点震动。 Here's一个关于它外观的简单例子。
以下是碰撞检测和重力计算的代码。
public void CheckBounds(int maxHeight, int maxWidth)
{
if (this.position.Y + (radius + radius) > maxHeight)
this.velocity.Y = -Math.Abs(velocity.Y * 0.65f); // 0.65 is the "bouncyness"
}
以下是主要的更新部分
for (int i = 0; i < balls.Count; i++ )
{
Ball b = balls[i];
for (int k = 0; k < balls.Count; k++) // check for collision with other balls
{
if (balls[i] == balls[k])
continue;
if (balls[i].Colliding(balls[k]))
balls[i].Collide(balls[k]);
}
b.velocity.Y += gravitationalPull; // a gravity constant
b.CheckBounds();
b.position = Vector2.Add(b.position, b.velocity);
}
有谁知道如何修复振动?我尝试设置一个最小的速度值,计算重力(如果velocity.y&lt;某个值然后不计算),但是然后球在碰撞时甚至在产生时停在空中。