2017-02-11 3 views
0

JavaFXを使用して2Dビデオゲームを構築しようとしています。スクリーンの下部には魚雷を発射する潜水艦があります。私はアングルで魚雷を発射した場合、より速い速度で移動することに気付きました。私は速度の違いは、スクリーンが長方形であることを前提としています。斜めに移動すると、より多くの距離をカバーしています。スクリーン解像度を考慮してJava2Dグラフィックスのスプライトの動きを正規化する方法

これを考慮する技術はありますか?そのため、発射体の移動角度に関係なく一定の移動速度を得ることができますか?私はEclipseの下でJavaFXを使ってゲームを書いています。

ありがとうございました! ありがとう!

答えて

1

既に異なる方向で発射しているので、2つのコンポーネントによって定義された速度ベクトルがあると仮定しています(x, y)。 JavaFXでは、このようなベクトルはPoint2Dで表すことができます。

public void fire() { 
    // the point at which you are shooting 
    Point2D target = ... 

    // the point from where you are shooting 
    Point2D source = ... 

    // the projectile speed per frame 
    double speed = ... 

    // velocity vector to be used to move 
    // the projectile at constant speed per frame 
    Point2D velocity = target.subtract(source).normalize().multiply(speed); 
} 

UPDATE:(角度から含まベクトル生成)

あなたがターゲットポイントを知っていない場合は、あなたが得ることができspeedあなたは次の操作を行うことができ、発射の時に旅行したいを考えますあなたが撮影に使用する角度からのベクトル:

public void fire() { 
    double angleDegrees = ... 
    double angleRadians = Math.toRadians(angleDegrees); 

    // the point from where you are shooting 
    Point2D source = ... 

    // the projectile speed per frame 
    double speed = ... 

    Point2D shootingVector = new Point2D(Math.cos(angleRadians), Math.sin(angleRadians)); 

    // velocity vector to be used to move 
    // the projectile at constant speed per frame 
    Point2D velocity = shootingVector.normalize().multiply(speed); 
} 
+0

こんにちはAlmasB、私はベクトルの数学で完全な初心者です。私はサブのx、y座標を持っています。私は一定の角度(30,45,90など)で魚雷を発射したいと思います。このfire()メソッドであなたのスピードの入力を使って、魚雷が取る経路をどのように生成するのですか?あなたの助けに感謝! – user1104028

+0

更新された回答をご覧ください。あなたはY軸を調整する必要があるかもしれません。なぜなら、グラフィックスでは、正のYが下がり、数学では正のYが上にあるからです。 – AlmasB

+0

こんにちはAlmasBだから、VectorBrowserのNewBieである、私は発射体の角度とスピードを指定しているので、射撃ベクトルには射影体が従わなければならないXとYのインクリメンタルな動きが含まれていますか? (私は射影が続く必要があるx、yの点の配列を生成するために探しています)ありがとう! – user1104028

関連する問題