2
我一直在研究一个简单的太空射击游戏,并且已经到了项目中我写得很糟糕的代码实际上正在放慢速度。在运行EQATEC之后,我可以看到大部分问题都在检查碰撞检测中的一切。我正在考虑投入QuadTree,但大多数碰撞都在小行星上,这些小行星的确有很多变化(需要大量更新)。我的下一个选择是微观优化碰撞检查本身。这是它:C#/ XNA - 边界圆碰撞(微)优化?
public bool IsCircleColliding(GameObject obj) //simple bounding circle collision detection check
{
float distance = Vector2.Distance(this.WorldCenter, obj.WorldCenter);
int totalradii = CollisionRadius + obj.CollisionRadius;
if (distance < totalradii)
return true;
return false;
}
我听说Vector2.Distance涉及昂贵的Sqrt,所以有什么办法可以避免这种情况吗?或者有没有办法通过一些奇特的计算来近似距离?任何更快的速度,本质上。
此外,与实际问题略有无关,是否有一种很好的方法(QuadTrees除外)用于快速移动对象的空间分区?
好吧,用DistanceSquared替换Vector2.Distance,并将每个半径乘以它自己,现在碰撞半径似乎被击晕了;一切似乎都陷入彼此之中。我会用断点玩一下。 :P – Lexusjjss 2013-05-13 22:49:46
你必须平方totalradii,而不是每个半径单独。 – redtuna 2013-05-13 22:54:02
Aaa现在可以工作。那么,这让我感觉像一个愚蠢的人。谢谢。 – Lexusjjss 2013-05-13 22:55:29