安卓游戏开发 : Collision Detection Failing

标签 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;

当游戏以正常速度运行时,这种方法非常有效;但是,如果游戏变慢,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/

相关文章:

android - 如何让我的 EditText 字段显示当前网页 URL?

java - 需要帮助检测两个物体之间的碰撞

Java矩形碰撞检测混淆

c# - OnTriggerEnter 在意外对象上被调用

android - 在 Android Studio 中安装终极版 IntelliJ 插件

java - 如何在数据点上添加点击监听器?

java - 有人可以帮我处理此消息吗?我尝试创建 ListView ,但运行代码时会弹出此错误

android - 用于处理的游戏 handle 控制 + 用于控制 Arduino 机器人的 Android

javascript - 检查大量对象的碰撞 JS

android - AndEngine中的手绘物理对象