【发布时间】:2018-12-14 03:31:14
【问题描述】:
我正在编写一个物理引擎,当球撞击表面时,它会以它落下速度的一半弹起(velocity.y = -velocity)。然而,当球几乎静止时,它会不断地切换速度并开始以非常慢的速度从平台上落下,但如果我让它跑得足够长,它最终还是会落下,这是不可接受的。我尝试编写一些代码来阻止它,但它检查得太快了这里是尝试检查它的更新方法。
public void update() {
velocity.y += Globals.GRAVITY.y;
if(canFall)
position.y += velocity.y;
position.x += velocity.x;
oldPosition.y = position.y;
oldPosition.x = position.x;
elapsedTime += 1 * Gdx.graphics.getDeltaTime();
if(elapsedTime >= 5){
if(oldPosition.y - 5 <= position.y && oldPosition.y + 5 >= position.y){
elapsedTime = 0;
canFall = false;
}else{
canFall = true;
elapsedTime = 0;
}
}
}
碰撞处理程序知道它何时击中球的顶部,这是我需要的唯一解决方案。我如何检查球何时静止。
此代码尝试检查球是否在几秒钟内没有移动,如果没有移动,则将canFall 设置为false。我需要一个通用检查来查看球是否应该停止。从下图可以看出球落下平台时的速度。图片显示十秒后球“静止”,您可以看到球缓慢但肯定地落下。在这个“静止”速度下,每三秒 y 位置下降 1,速度从正变为负,因此您在图片中看到的速度不会一直为负。忽略经过的时间变量任何帮助都非常感谢!
【问题讨论】: