Android游戏开发:碰撞检测失败

Sev*_*veN 5 android collision-detection

我目前正在为Android开发游戏,我希望您在我遇到的问题上获得专业知识.

背景:

  1. 我的游戏包含帧速率独立运动,它在执行必要的速度计算之前考虑了增量时间值.

  2. 游戏是传统的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;
Run Code Online (Sandbox Code Playgroud)

当游戏以常规速度运行时,这种方法非常适用; 但是,如果游戏速度变慢,deltaTime(前一帧和当前帧之间经过的时间)变大,而characterFootY + characterVelocityDown超过定义碰撞检测的边界,角色直接落入(就好像传送一样) ).

我应该如何处理此问题以防止这种情况发生?

在此先感谢您的帮助,我期待着向您学习!

Woj*_*ech 1

您需要做的是以恒定的增量时间运行物理循环,并根据当前刻度迭代所需的次数。

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有多种技术用于处理左侧刻度线 ( m_dt )
最小刻度线和最大刻度线的上限也是必须的。