如何在游戏中优化对象碰撞检查

  • 本文关键字:对象 碰撞 优化 游戏 c++
  • 更新时间 :
  • 英文 :


在我的游戏中,ObjectManager类管理我的游戏的所有对象,它有一个对象列表

当我检查每个对象的碰撞时,我使用2作为语句。

for(int i = 0; i < objectnum; ++i )
{
  for(int j = 0; j < objectnum; ++j)
  {
    AABB_CollisionCheck()
  }
}

但是如果游戏中有许多对象,则FPS会变低。(80个对象==40帧)也许这是因为我的碰撞检查方法效率低下。(如果对象数量是n,那么我的方法操作n^2次)

  1. 你能给我一些关于碰撞检查优化的提示吗

我想减少for循环来检查每个对象碰撞。

  1. 使用或不使用回调函数有什么不同?用于碰撞检查。关于Callback有什么操作速度的冒险吗




p.s非常感谢你阅读我的问题。请原谅我的英语能力。。。

通常情况下,了解一点额外的词汇会在这里发现丰富的信息。您正在寻找的是碰撞检测的宽阶段,这是一种防止您不得不查看每对对象的任何方法,从而有望避免n^2的复杂性。

一种流行的方法是空间哈希,将空间细分为单元格网格,并将每个对象分配给包含该对象的单元格。然后,只将每个单元格中的对象与该单元格和相邻单元格中的其他对象进行比较。

另一种方法称为"扫掠和修剪",它利用了对象通常不会从一帧移动到下一帧的事实。

你可以在这个问题中找到更多信息:宽相位碰撞检测方法?

  1. 你能给我一些关于碰撞检查优化的提示吗

首先,你可以尝试优化你的第二个循环,这样做:

for (int i = 0; i < objectnum; i++)
{
  for (int j = i+1; j < objectnum; j++)
  {
    AABB_collisioncheck();
  }
}

这只会以一种方式检查碰撞,比如说A碰撞了B,那么你就不会触发B碰撞了A。

最新更新