2012-10-17 40 views
3

我正在构建一艘基于太空飞船的游戏,我有一个间歇性的问题,我的部队的天空火箭无限。我假设的问题是关系到这些关系,船舶:2D物理边缘情况下的2D运动

  • 加速取决于力
  • 速度取决于加速度
  • DragForce(组)依赖于速度

这里的船游戏:http://shootr.signalr.net

这里是运动背后的物理方程的重构因子(使它不像一些大的函数)。

double PercentOfSecond = (DateTime.UtcNow - LastUpdated).TotalMilliseconds/1000; 

// Mass = 50 
_acceleration += Forces/Mass; 

Position += Velocity * PercentOfSecond + _acceleration * PercentOfSecond * PercentOfSecond; 
Velocity += _acceleration * PercentOfSecond; 

_acceleration = new Vector2(); 
Forces = new Vector2(); 

// DRAG_COEFICCIENT = .2, DRAG_AREA = 5 
Vector2 direction = new Vector2(Rotation), // Calculates the normalized vector to represent the rotation 
     dragForce = .5 * Velocity * Velocity.Abs() * DRAG_COEFFICIENT * DRAG_AREA * -1; 

Forces += direction * ENGINE_POWER; // Engine power = 110000 

LastUpdated = DateTime.UtcNow; 

请帮忙!!

+0

我没有看到你的更新在哪里'LastUpdated' ...这意味着'PercentOfSecond'将继续增长和增长... – Yahia

+0

对不起,在每次迭代结束时更新。我会更新代码示例 –

+0

我无法重现您与您链接的实时游戏玩的bug。你能否简单解释一下你所看到的错误? – theJollySin

回答

1

首先,你有一个不适当的操作,只有当你假设向量被初始化为零向量时才会起作用。例如:

_acceleration += Forces/Mass; // your code 
_acceleration = Forces/Mass; // what it should be 

你的部队还应该是:

Forces = direction * ENGINE_POWER + dragForce; 

如果没有您的问题有所帮助,那么你必须与方向向量的计算问题。确保它正常化。你的dragForce等式看起来很好。但是,请确保您添加它并且不要减去,因为您已经将dragForce乘以-1。