问题描述
||
我有一个偷偷的怀疑,我做错了。现在它起作用了,以至于引力将物体拉向地面,但我在操纵物体的速度时遇到了麻烦。
这是一个朝着地面跳落的球。
我还有另一个名为“ jump”的函数,它只是向其yVel添加了
jSpeed
我可以增加gravity
,跌落得更快。
我可以提高ѭ0的速度,但上升的时间会更长,但不会更快
但是我无法让它更快地完成所有工作。它看起来非常缓慢,这可能是(也可能不是)因为我的模拟器平均以11 fps的速度运行。
仅仅是我的模拟器,还是我的东西?
float time = elapsedtime/1000F;
if (speed < maxSpeed){
speed = speed + accel;
}
if(mY + mVelY < Panel.mHeight){ //0,0 is top-left
mVelY += (speed);
}
if (!(mY + height >= Panel.mHeight)){
mVelY = mVelY + gravity ;
}
mX = (float) (mX +(mVelX * time));
mY = (float) (mY + (mVelY * time));
解决方法
我认为您在这里有正确的一般思路,但是关于您的代码的很多内容令人困惑。
我的问题主要是关于变速-在我看来,您的球正在通过变速和加速来加速,直到达到最大速度。与此相反的是重力将球拉低(加速)。
现在通常这不是您描述方式的“跳跃”方式。因此,对我来说,当玩家按下“ jump”时,您应该将YVel设置为jspeed,然后让等式的重力部分降低它-也就是说,如果您删除了代码:
if(mY + mVelY < Panel.mHeight){ //0,0 is top-left
mVelY += (speed);
}
然后它会上升一点,然后释放动量至重力,然后又下降下来-上面的代码不断将其向上推,直到到达顶部为止,一旦开始下降,则将其向上推回。
我想知道关于speed和maxspeed的代码是否应该作用于XVel而不是像您所编码的那样作用于YVel-这样做更有意义。