2011-07-24 12 views
2

physics helperライブラリを使用しています。オブジェクトが静止しているかどうかを調べる方法は?

私は、物理オブジェクトが静止しているかどうかをどのように判断できるかを調べようとしています。誰かがこれを行う方法を知っているか、私ができることのアイデアを持っていますか?

シナリオの例としては、跳ね返り投げられるボールがあります。私は個々の時間が床との衝突イベントから跳ね返り、オブジェクトがそれに基づいて休息しているかどうかを判断するタイマーを作成しようとしましたが、ユーザーがボールを左右にスライドさせた場合には機能しません。

提案がありますか?

+0

Farseerには、オブジェクトが静止しているかどうかを検出するためのメカニズムが組み込まれているため、スリープ状態になることはありませんか? –

+0

私はある種の状態を探していましたが、見つけられませんでした。物理ヘルパーでは、各オブジェクトは遠方のBodyObjectのように動作し、実際にはオブジェクトの位置を取得するだけでなく、力、衝動などを加えることができます。 – Tom

答えて

2

基礎となるFarseer Bodyに実行時アクセス権がある場合は、LinearVelocityというプロパティにアクセスする必要があります。0の値を確認できます。

1

これはかなり基本的なものです。あなたの物理オブジェクトは、オブジェクトの位置、速度などに関する情報を含む何らかの種類のクラスのインスタンスでなければなりません。いつでも、オブジェクトの速度を調べることができます。速度== 0それは安静時です。

+0

フィジックスヘルパーを使用してフィジックスオブジェクトを操作する場合、速度プロパティはありません。 – Tom

+0

それはかなりばかだ。そうだとすれば、私は自分の物理クラスを作ります。 –

+0

私がやっていることは、それが行動を使用するので、物理ヘルパーを使いやすいことでした。しかし、まあまあ、ちょっと寂しいです。 – Tom

0

これまでのところ、私は簡単な方法を思いついた。 2つのクラス変数(ベクトル2 currentPosition、ベクトル2 previousPosition)を作成して、しょっちゅう、次のダニ法を用いたダニディスパッチャタイマーの作成:例えば、それはボールをキャプチャした場合にかかわらず、それにいくつかの問題があります

void bounceTimer_Tick(object sender, EventArgs e) 
    { 
     currentPosition = ball.Position; 

      if (currentPosition == previousPosition) 
      { 
       // Object at rest 
      } 
      else 
      { 
       // Object moving 
      } 
     } 

     previousPosition = currentPosition; 
    } 

を空気中の位置は同じ位置(非常にありそうもない)で戻ってきて、非常に高い頻度で時々刻々と同じ位置をとらえることができます。安心して、他の誰かがより良い方法を持っていますか?

+0

恐らく最もエレガントな解決策ではありません。あなたが言及したような特別な場合があるでしょう。クラスの作成に目を向ける。 –

+2

浮動小数点値を比較することは、一般的には悪い計画です。 –

+0

フレームごとに1回だけチェックするのはなぜですか? – CodesInChaos

関連する問題