我有一种潜在的怀疑,我做错了。它现在起作用,在重力将物体拉向地面的范围内,但是我在操纵物体的速度时遇到了麻烦。
这是一个球跳向地面的方式。
我有另一个名为“jump”的函数,只是将jSpeed
添加到它的yVel
我可以增加gravity
,但速度会更快。
我可以提高jSpeed
速度,它会上升更长时间但不会更快
但我无法让它更快地完成所有事情。它看起来很痛苦,这可能是也可能不是因为我的模拟器平均运行速度为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));
答案 0 :(得分:0)
我认为你在这里有正确的一般性想法,但很多关于你的代码令人困惑。
我的问题主要是关于变速 - 在我看来,你的球正在被变量speed和accel加速,直到达到最大速度。反对这是重力拉动(加速)球。
现在通常情况下,这不是你所描述的那种“跳跃”的方式。因此,对于我来说,当玩家点击“跳跃”时,你应该将YVel设置为jspeed并让等式的重力部分将其恢复 - 这就是你删除了代码:
if(mY + mVelY < Panel.mHeight){ //0,0 is top-left
mVelY += (speed);
}
然后它会上升一点,然后向重力松动,然后再回落 - 上面的代码一直向上推,直到它撞到顶部,并且一旦它开始下降就会把它推回去。
我想知道围绕速度和maxspeed的代码是否应该作用于XVel,而不是你编码的YVel - 这会更有意义。