弹丸速度箱2d

时间:2014-10-12 20:18:21

标签: java libgdx box2d game-physics projectile

我想从屏幕右下角向屏幕左侧发射射弹。现在,我希望射弹以随机的速度和角度根据屏幕尺寸飞行,就像那样。现在,我知道这很简单,但由于某些原因我无法做到这一点。

这是我到目前为止所尝试的内容:

我的第一次尝试 - 启动功能

private void launchProjectile() {
        projectiles.peek().getBody().applyForce(projectiles.peek().getBody().getWorldVector(new Vector2(MathUtils.random(-20,-1*SCALAR_HEIGHT),
        MathUtils.random(2*SCALAR_HEIGHT,8*SCALAR_HEIGHT)).scl(MathUtils.random(3*SCALAR_HEIGHT,5*SCALAR_HEIGHT))), 
        projectiles.peek().getBody().getWorldCenter(), true);
        Gdx.app.log("System", String.valueOf(SCALAR_HEIGHT));
    }

这是我的第二次尝试 - 启动功能

private void launchProjectile() {
    float xVelocity;
    float yVelocity;
    xVelocity = (float) MathUtils.random(0,0)*SCALAR_WIDTH/2;
    yVelocity = (float) MathUtils.random(20,20)*SCALAR_HEIGHT;
    velocityProjectile.set(xVelocity,yVelocity); // Sets the velocity vector to the above values
    velocityProjectile.sub(projectiles.peek().getBody().getPosition());
    velocityProjectile.nor(); // Normalize the vector - Now it's fine and ready!
    // Sets the start velocity of the projectile Trajectory to the current velocity
    projectiles.peek().getBody().setLinearVelocity(velocityProjectile.scl(18+SCALAR_HEIGHT));
}

在两次尝试中,射弹的飞行速度超过了我的需要,并且没有考虑屏幕尺寸。

你能告诉我这样做的正确方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

从这个页面开始:http://www.iforce2d.net/b2dtut/projected-trajectory

在"它应该以多快的速度达到所需的高度?"您可以看到,射弹到达屏幕顶部需要多少垂直速度。因此,您会选择一个小于该值的随机数,以确保它不会偏离屏幕顶部。

接下来,"会有多高?"部分,您可以看到公式,以了解弹丸达到最大高度所需的时间步长。然后将花费相同的时间回到起始高度。例如,让我们说需要60个时间步才能达到最大高度。这意味着它需要120个时间步骤再次下降到它开始时的相同高度。然后,您可以设置启动速度的水平部分,使其无法以120个时间步进出屏幕。