2d游戏物理,正确完成

|| 我有一个偷偷的怀疑,我做错了。现在它起作用了,以至于引力将物体拉向地面,但我在操纵物体的速度时遇到了麻烦。 这是一个朝着地面跳落的球。 我还有另一个名为“ 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-这样做更有意义。     

要回复问题请先登录注册