我隐约怀疑我做错了。它现在起作用了,引力把物体拉向地面,但我在操纵物体的速度时遇到了麻烦。
这是什么,是一个球跳向地面。
我还有一个名为“jump”的函数,它只是将jSpeed
添加到yvel中
我可以增加gravity
,它下降得更快。
我可以提高jSpeed
的速度,它上升的时间会更长,但不会更快
但我不能让它做得更快。它看起来非常慢,这可能是因为我的模拟器平均每秒11帧。
只是我的模拟器,还是我这边的东西?
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,正如您所编写的那样-这会更有意义。