android - 2d 游戏物理,做对了

标签 android 2d physics

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

这是什么,是一个跳向地面的球。

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

相关文章:

android - 自定义字体显示 Artifact

用于绘图程序的 Java 2D 库

c++ - 使用 auto 打印二维 vector 的内容

c - realloc 无法从其他函数访问新大小

c# - 生成高斯数

ios - 使用 cocos2d-x 在 box2d 中移动车身

c++ - Minecraft 类碰撞

java - 在 Google Play 商店发布应用程序后,当应用程序依赖于 Google 登录时,如何测试我的应用程序?

java - 底部导航栏被 ScrollView 布局推出 View 之外

Android Facebook 登录问题?