【发布时间】:2013-10-27 03:45:38
【问题描述】:
我目前正在开发一款适用于 Android 的游戏,希望您能就我一直遇到的问题提供专业知识。
背景:
我的游戏包含独立于帧速率的运动,它包含 在执行必要的 Velocity 之前计算增量时间值 计算。
该游戏是一款传统的 2D 平台游戏。
问题:
这是我的问题(简化)。假设我的角色是一个站在平台顶部的正方形(“重力”是 characterVelocityDown 的恒定向下速度)。
我已将碰撞检测定义如下(假设 Y 轴指向下方):
鉴于 characterFootY 是我的方形字符底部的 y 坐标,platformSurfaceY 是我平台的上 y 坐标,platformBaseY strong> 是我平台的下 y 坐标:
if (characterFootY + characterVelocityDown > platformSurfaceY && characterFootY + characterDy < platformBaseY) {
//Collision Is True
characterFootY = platformSurfaceY;
characterVelocityDown = 0;
} else{
characterVelocityDown = deltaTime * 6;
当游戏以正常速度运行时,这种方法非常有效;但是,如果游戏速度变慢,deltaTime(即前一帧和当前帧之间经过的时间)变大,characterFootY + characterVelocityDown 超出了定义碰撞检测的边界,角色就会直接穿过(就像传送一样)。
我应该如何解决这个问题以防止这种情况发生?
提前感谢您的帮助,我期待向您学习!
【问题讨论】:
-
如果其他人遇到此问题,可能的解决方案是设置 deltaTime 值的上限,以便当它超过某个值时,您只需将其设置为等于上限。这会使游戏速度不一致,但在大多数情况下应该没问题。
-
您是否同时拥有前后 delta 值,因为可以在那里进行比较?
标签: android collision-detection