【发布时间】:2014-05-03 16:02:21
【问题描述】:
所以我正在做我的第一个 3D 项目,一切都很顺利,直到我决定让 FPS 角色(相机)跳跃。我尝试了一些方法,但在我成功完成大多数的工作之前,所有这些方法看起来都不是很好。现在的问题是“大部分时间” - 这应该是所有时间。
问题是当我连续点击跳转按钮时,它开始发疯。当我超过它时,我试图将位置始终设置回零,但有时它仍然会发疯,尽管频率较低。有什么建议可以让它一直工作吗? (我正在使用没有引擎的 OpenGL 和 java)
跳跃部分代码:
if (Keyboard.isKeyDown(Keyboard.KEY_SPACE) && !jumping
&& position.y >= temp) { //temp - floor height
jumping = true;
}
gravity = (float) ((walkingSpeed * 0.00003) * delta);//delta - time
//System.out.println(delta);
if (position.y < temp) { //In the air
speed = speed + gravity;
position.y = position.y + speed;
}
if (jumping) {
speed = speed - (float) ((walkingSpeed * 0.0006) * delta);
position.y = position.y + speed;
jumping = false;
}
if (position.y > temp) //**Supposed** to solve the problem
position.y = temp;
【问题讨论】:
-
不清楚您的问题到底是什么。问题是你可以在半空中跳跃吗?您可能应该将
jumping状态保持为 true 直到落地,而不是在对速度进行瞬时更改后立即将其重置。正确地这样做当然需要某种碰撞检测,但您可以天真地假设地面是一个水平面并针对初始高度进行测试(我认为您现在正在这样做)。 -
顺便说一下,一些 FPS 游戏允许您进行二段跳,因此与其将
jumping设为布尔值,不如考虑使用整数计数器。 -
@AndonM.Coleman - 我已经阻止了在半空中的跳跃,是的,我现在正将地板看成水平面。我的问题是当我不断点击空格键时。起初,它有规律地跳跃,但一段时间后它开始突然从我写的或相反的地方跳跃 X10。我不知道为什么会这样,我需要一个建议如何做得更好\修复它。关于二段跳——不是现在。我首先需要基础知识。我正在做一个普通房间里的简单步行,稍后我会扩展它。
-
嗯,是的。这里的问题是,如果您连续按住空格键,它不会阻止您无限次跳跃。只应在落地后将
jumping设置为 false。否则,当空格键按下时发生的每一帧都会让你跳跃。 -
@AndonM.Coleman - 不,这不是让我再次跳跃的问题。我跳下来摔倒,只有当我触到地板时我才能再次跳(看看代码中的第一个 if 语句)。我会尽力解释得更好。例如,我应该从 y=0 跳到 y=3 并且它可以工作。但有时当我单击一次空格键时,它会突然跳转到 y=17。这发生在我之前连续单击空格键之后(例如,有时它也会跳到 y=0.5)。那里发生了一些事情,即使在常规跳跃中也会让它变得异常,我必须重新打开游戏才能让它再次工作。
标签: java opengl 3d game-physics