2

伙计们!我在处理游戏对象(其他尺寸)的碰撞时遇到问题。我的算法是:

for (Array<GameObject*>::iterator it = objects.begin(); it != objects.end(); it++)
{
   RECT objRect = (*it)->GetBoundingBox();
   for (Array<GameObject*>::iterator it2 = object.begin(); it2 != object.end(); it2++)
   {
      RECT objRect2 = (*it2)->GetBoundingBox();
      IntersectRectangles(objRect, objRect2);
   }
}

是的,这很好用。但它的工作非常缓慢。我有一个想法(只检查附近的对象到对象),但这意味着越来越多的迭代。也许存在更好的方法?

4

2 回答 2

3

将您的游戏世界划分为单元格,其中包含指向驻留在其中的对象的指针列表。当对象在它们之间移动并且单元格的大小大于您最大的对象时,请确保更新您的单元格。仅检查与同一单元格和相邻单元格中的对象的碰撞。您可以试验像元大小并在以后进行更多优化。

于 2013-08-16T02:06:07.977 回答
1

您可以将游戏世界划分为一些大区域,并仅检查一个区域中游戏对象的冲突。这是一个基本的方法。

于 2013-08-16T02:20:50.643 回答