4

libgdx ゲームで

タッチダウンしてどこかをドラッグし、リリース (タッチアップ) で、ターゲット ボディからの距離と方向に基づいて方向力を適用します。タッチダウンすると、ターゲット ボディは静止したままになり、タッチアップすると、目的の軌道に沿って力が適用されます。

(怒っている鳥に非常に似ています-パチンコをハックすると、ターゲットの体の軌跡が点線で表示されます-私も同じことをしたいです)

したがって、これは最も難しいことではないかもしれませんが、いくつかのオプションを考えると、MouseJointDef を使用することに傾いていますが、すぐに力が適用されます (つまり、ターゲットはすぐに移動します - 静止したままにして、タッチアップイベントが発生したら次に力を加えます)

また、軌道を描く最も簡単な方法は何ですか? Box2Dも使用しています。

4

1 に答える 1

8

クラスを継承するInputAdapterクラスを作成し、そのインスタンスを作成して登録し、タッチ入力をリッスンします。

    Gdx.input.setInputProcessor(inputAdapter);

タッチ イベントを処理するには 3 つのメソッドがありtouch_downtouch_draggedオーバーライドtouch_upする必要があります。

touch_downタッチ位置が野鳥エリア内かどうかを確認します。そうであれば、ブールフラグを真にします。

touch_dragged、上記のフラグを確認し、true であれば、鳥の射撃中心と射撃角度に対するタッチ位置の距離を計算します。

ではtouch_up、 を呼び出して、計算された量で撮影を注文できます。

    body2shoot.applyLinearImpulse(impulse, body2shoot.getWorldCenter());

MouseJointDefを移動する必要はありませんbody2shootbody2shootレンダリングの各サイクルでドラッグされるタッチ位置の変換を設定するだけです。

軌道を計算するために、次のようなクラスを作成しました。

public class ProjectileEquation
{
public float gravity;
public Vector2 startVelocity = new Vector2();
public Vector2 startPoint = new Vector2();

public ProjectileEquation()
{   }

public float getX(float t)
{
    return startVelocity.x*t + startPoint.x;
}

public float getY(float t)
{
    return 0.5f*gravity*t*t + startVelocity.y*t + startPoint.y;
}
}

それを描画するために、startPointandを設定startVelocityし、ループでt(時間)を段階的に指定して and を呼び出しgetX(t)ますgetY(t)

于 2012-05-05T13:11:42.033 に答える