2d游戏物理,做得对

时间:2011-06-15 07:31:05

标签: android 2d physics

我有一种潜在的怀疑,我做错了。它现在起作用,在重力将物体拉向地面的范围内,但是我在操纵物体的速度时遇到了麻烦。

这是一个球跳向地面的方式。

我有另一个名为“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));

1 个答案:

答案 0 :(得分:0)

我认为你在这里有正确的一般性想法,但很多关于你的代码令人困惑。

我的问题主要是关于变速 - 在我看来,你的球正在被变量speed和accel加速,直到达到最大速度。反对这是重力拉动(加速)球。

现在通常情况下,这不是你所描述的那种“跳跃”的方式。因此,对于我来说,当玩家点击“跳跃”时,你应该将YVel设置为jspeed并让等式的重力部分将其恢复 - 这就是你删除了代码:

if(mY + mVelY < Panel.mHeight){ //0,0 is top-left
  mVelY += (speed);
}

然后它会上升一点,然后向重力松动,然后再回落 - 上面的代码一直向上推,直到它撞到顶部,并且一旦它开始下降就会把它推回去。

我想知道围绕速度和maxspeed的代码是否应该作用于XVel,而不是你编码的YVel - 这会更有意义。