我在游戏中使用SDL2。
我有一个SDL_Rects的std :: vector(即矩形对象),它包含我游戏中某个关卡的固定平台(即玩家无法通过的平台)。
检查碰撞时,我当前的代码执行以下操作:
for (SDL_Rect rect : rects) {
if (player.collides(rect)) {
// handle collision
}
}
考虑我有一个水平,有很多(例如500个)实体平台矩形,通过它们并检查碰撞是否效率低下?有更好的方法吗?
collides()函数仅检查AABB碰撞(4个简单条件)。
答案 0 :(得分:0)
我认为这是合理的。你有简单的形状,并进行简单的碰撞检查。想象一下更具图形密集度的游戏。即便如此,他们可能会为角色设置一个复杂的骨架网格物体,但只需对易于计算的边界形状进行碰撞检查,它们可能会同时发生超过500件事情。
在一个更复杂的游戏引擎中,不同的类型可能阻止某些类型而不阻止其他类型,因此它不仅要检查简单的重叠事件,还必须知道重叠的对象是否应该交互。或者对于不同的对象可能存在不同的交互。
对于游戏,基本上你的瓶颈是渲染和相关的计算,所以除非你知道你有使用游戏逻辑(复杂的路径查找或AI或类似的东西)做一些非常缓慢的事情的危险,我会将我的优化工作集中在渲染上。