我目前正在为 Android 开发一款游戏,我希望您能就我一直遇到的问题提供专业知识。
背景:
我的游戏包含帧率独立运动,它考虑了 在执行必要的速度之前考虑增量时间值 计算。
该游戏是一款传统的 2D 平台游戏。
问题:
这是我的问题(已简化)。假设我的角色是一个站在平台顶部的正方形(“重力”是 characterVelocityDown 的恒定向下速度)。
我定义了碰撞检测如下(假设 Y 轴指向下方):
给定 characterFootY 是我的方形角色底部的 y 坐标,platformSurfaceY 是我平台的上部 y 坐标,platformBaseY 是我平台的下 y 坐标:
if (characterFootY + characterVelocityDown > platformSurfaceY && characterFootY + characterDy < platformBaseY) {
//Collision Is True
characterFootY = platformSurfaceY;
characterVelocityDown = 0;
} else{
characterVelocityDown = deltaTime * 6;
当游戏以正常速度运行时,这种方法非常有效;但是,如果游戏变慢,deltaTime(前一帧和当前帧之间耗时)会变大,characterFootY + characterVelocityDown 超过定义碰撞检测的边界,角色直接掉落(就像传送一样)。
我应该如何处理这个问题以防止这种情况发生?
在此先感谢您的帮助,我期待着向您学习!
最佳答案
您需要做的是以恒定的 delta 时间运行您的物理循环,并根据当前节拍迭代它所需的次数。
const float PHYSICS_TICK = 1/60.f; // 60 FPS
void Update( float dt )
{
m_dt += dt;
while( m_dt > PHYSICS_TICK )
{
UpdatePhysics( PHYSICS_TICK );
m_dt -= PHYSICS_TICK;
}
}
有多种技术用于处理左边的刻度 (m_dt)
最小刻度和最大刻度的上限也是必须的。
关于安卓游戏开发 : Collision Detection Failing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11068232/