我暗暗怀疑我做错了。它现在起作用了,在重力将物体拉向地面的范围内,但我在操纵物体的速度时遇到了麻烦。
这是什么,是一个跳向地面的球。
我有另一个名为“jump”的函数,它只是将 jSpeed
添加到它的 yVel
我可以增加重力
,让它下落得更快。
我可以提高 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));
最佳答案
我认为您的总体思路是正确的,但您的代码中有很多内容令人困惑。
我的问题主要与可变速度有关 - 在我看来,您的球正在通过可变速度和加速度加速,直到达到最大速度。与此相反的是重力将球拉下(加速)。
现在通常这不是您描述的“跳跃”方式。所以对我来说,当玩家点击“跳跃”时,你应该将 YVel 设置为 jspeed,然后让等式的重力部分将它拉回来——也就是说,如果你删除了代码:
if(mY + mVelY < Panel.mHeight){ //0,0 is top-left
mVelY += (speed);
}
然后它会上升一点,然后失去重力的动量并回落 - 因为上面的代码一直将它向上推直到它到达顶部,并且一旦它开始下降就会将它推回。
我想知道关于 speed 和 maxspeed 的代码是否应该像您编写的那样作用于 XVel 而不是 YVel - 这会更有意义。
关于android - 2d 游戏物理,做对了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354448/