2012-05-01 6 views
4

のような軌跡線を引くMouseJointDefのlibgdx - libgdxゲームに怒っている鳥

私はタッチダウンして、どこかにドラッグしてリリース(タッチアップ)上のターゲット本体からの距離と方向に基づいて、方向の力を適用したいです。あなたがタッチダウンすると、ターゲットボディは依然として動き続け、タッチアップすると、力は所望の軌道に沿って加えられる。

(怒っている鳥に非常に似て - あなたはパチンコをハック保持したときに、ターゲットボディのために点線で軌道を見ることを得る - 私は同じことをやりたい)

だから私はこれがない可能性があることを推測します最も難しいことですが、MouseJointDefを使用する方向に向いていますが、即時の力が適用されます(つまり、ターゲットが即座に動きます - それがまだ起きていたら、タッチアップイベントが発生してから力が加えられます)

軌道を描く最も簡単な方法は?私もBox2Dを使用しています。

答えて

7

InputAdapterクラスを継承するクラスを作成し、インスタンスを作成して登録してタッチ入力を待ち受けます。

Gdx.input.setInputProcessor(inputAdapter); 

あなたがオーバーライドする必要がタッチイベントtouch_downtouch_draggedtouch_upを処理するための3つの方法があります。

touch_downには、鳥の領域にいるかどうかの接触位置を確認します。そうであれば、真偽フラグを真にする。

touch_draggedでは、上記のフラグをチェックし、それが真であれば、鳥の撮影センターに対する撮影位置と撮影角度の距離を計算します。

touch_upでは、body2shootを移動するMouseJointDefへの必要はありません

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

を呼び出すことにより算出した金額で撮影注文することができます。レンダリングの各サイクルでドラッグされるように、タッチ位置にbody2shootの変換を設定するだけです。

が軌道を計算するために、私はこのようなクラスを書いた:

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

を描画するために、それはちょうど私がして、ループ内で私がt(時間)を得startPointstartVelocityを設定し、増分およびgetX(t)を呼び出し、 getY(t)

+0

大好きですが、うまくいくようです;) – user1320651

+0

@Aliaaaトピックはかなり古くなっていますが、ボディに異なる質量などがあるため、体に適用したい衝動をどのように計算しますか?例は素晴らしいだろう! – george

+0

@georgeこの式を発明したのではなく、重力の影響を受けたオブジェクトを動かすための物理学の基本式です。 x = v0 * t + x0;y = 0.5 * a * t^2 + v0 * t + x0; – Aliaaa

関連する問題