我一直在研究一个简单的太空射击游戏,并且在项目中我写得非常糟糕的代码实际上正在减慢速度。运行 EQATEC 后,我可以看到大部分问题在于 icky 检查一切碰撞检测的所有内容。我正在考虑放入四叉树,但大多数碰撞都发生在小行星上,它们确实移动了很多(需要大量更新)。我的下一个选择是对碰撞检查本身进行微优化。这里是:
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)来对快速移动的对象进行空间分区?