0

画面の右下隅から画面の左側に向かって発射物を発射したい。今、私は発射体が画面の寸法に応じてランダムな速度と角度で飛ぶようにしたいと思っています。これは非常に単純なことですが、何らかの理由でこれを機能させることができません。

これが私がこれまでに試したことです:

初めての試み - 起動機能

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

これが私の2回目の試みです-関数の起動

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

どちらの試行でも、発射物は必要以上に飛んでしまい、本来あるべき画面サイズを考慮していません。

これを行う正しい方法を教えてください。

ありがとう!!

4

1 に答える 1

1

このページから始めます: http://www.iforce2d.net/b2dtut/projected-trajectory

「目的の高さに到達するには、どれくらいの速さで発射する必要がありますか?」セクションでは、発射体が画面の上部に到達するために必要な垂直速度を確認できます。したがって、画面の上部からはみ出さないように、それよりも小さい乱数を選択します。

次に、「どこまで上がるか」で。セクションでは、発射物が最大の高さに達するまでにかかる時間ステップ数を調べる式を確認できます。その後、元の高さに戻るまでに同じ時間がかかります。たとえば、最大の高さに達するまでに 60 時間ステップかかるとします。つまり、落下が始まったときと同じ高さまで再び落下するには、120 時間ステップかかることになります。次に、発射速度の水平部分を設定して、120 タイム ステップで画面からはみ出さないようにします。

于 2014-10-13T10:22:44.520 に答える