游戏是否应仅依赖帧速率?

Bru*_*uno 3 collision-detection

我想你对这个问题的建议......

为简单起见,我只考虑x轴.

在10号位置拍摄物体,其宽度也为10个单位,每秒向前移动100个单位,由于帧数较低,每次更新时应移动80个单位.

在调用第一次更新后,其位置现在为90,并且在位置120中存在另一个具有相同大小的对象.

下一次更新,将对象移动到位置170.考虑到我需要实现冲突检测,在Update之前或之后计算冲突,没有一个会起作用.

现在来一个简单的问题......

在这种情况下该怎么办?

做类似的事情:

Position start = destinationPos - currentPos;
for (int i; i < start; i++)
    if (IsColliding(movingObj.Position + i, staticObj))
        //do the colliding stuff here
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个解决方案,对于这种情况可能没问题,但如果你有x,y,z和很多移动物体怎么办?

我认为另一种解决方案是好的,但我不确定它是否可靠,是让另一个线程在循环中完成所有这些计算.

这个线程就像一个无限循环,并且在每次迭代时我会计算出elapsedTime我认为非常小的并继续移动并计算碰撞,并且渲染线程会慢得多,会获得当前状态对象,只是渲染它.

你们觉得怎么样?

Mik*_*els 7

这是一个问题,幸运的是,对于我们数学傻瓜,已经或多或少已经解决了.您所描述的问题被解决了动态碰撞检测,这是用来确定两个对象帧之间的碰撞,而对于某些类型的碰撞,甚至可以精确地告诉你,当碰撞发生时,这样你就可以更新世界的状态正确.

如果您对自己实现碰撞检测算法不是特别感兴趣,我会考虑使用已经完成此类操作的库:

关于这个主题的许多好书之一是实时碰撞检测.