【问题标题】:Projectile velocity box2d弹丸速度box2d
【发布时间】:2014-10-12 20:18:21
【问题描述】:

我想从屏幕右下角向屏幕左侧发射弹丸。现在,我希望弹丸以随机的速度和角度飞行根据屏幕尺寸,就像这样。现在,我知道这很简单,但由于某种原因,我无法完成这项工作。

这是我迄今为止尝试过的:

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

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));
}

在这两次尝试中,弹丸飞得比我需要的多,而且它没有考虑到应有的屏幕尺寸。

你们能告诉我这样做的正确方法是什么吗?

谢谢!!

【问题讨论】:

  • SCALAR_HEIGHTSCALAR_WIDTH 是什么?
  • 只是我定义的一个变量,它将根据屏幕尺寸缩放速度
  • 那么他们的价值观是什么?
  • 屏幕宽度除以十和屏幕高度除以十

标签: java libgdx box2d game-physics projectile


【解决方案1】:

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

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

接下来,在“它会涨到多高?”部分,您可以查看公式以了解弹丸达到最大高度所需的时间步长。然后将需要相同的时间才能回到起始高度。例如,假设需要 60 个时间步才能达到最大高度。这意味着它需要 120 个时间步才能再次下降到与开始时相同的高度。然后可以设置发射速度的水平部分,使其在 120 个时间步内不能超出屏幕。

【讨论】:

  • 我理解你答案的第一部分,但我不明白第二部分。我如何准确地使用您的公式来计算纬度速度? 120 个时间步是什么意思?我如何计算出身体在 120 个时间步内的位置?
  • 一个时间步是你调用world->Step的时候。大多数模拟以 60fps 运行,因此 120 个时间步长为 2 秒。假设你的屏幕是 50 米宽的物理单位。如果你想在 2 秒内走完 50m,那将是 25m/s 的速度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多