3

世界には、互いに衝突するいくつかのボールがあります。世界のあらゆる側面に静的な壁があります。

場合によっては、同じパスに沿って上下または左右に移動し続ける位置になります (壁に垂直な動きですか?)。

これを検出して、どちらかの方向に少し回転させる簡単な方法はありますか?

box2d を持つ任意の言語の疑似コードまたはコードをいただければ幸いです。

編集:@Andrewのリクエストによる画像

ここに画像の説明を入力

ボールがこのように動き続ける場合 (左/右/左/右...)、現在のパスから移動するように少し押したいと思います。

4

2 に答える 2

1

衝突b2ContactListenerを検出するためのサブクラスを作成できると思います(これは単純で、で説明されています)。作成した後、ボールごとに3つの速度値を保存します。ball-wallBox2D manual

  1. 最初の ball-wall衝突の前。
  2. 最初の ball-wall衝突後。
  3. 2回目ball-wallの衝突後。

これらの3つの速度を取得したら(GetLinearVelocityの関数を使用b2Body)-それらがある程度の精度で同じ線上にあるかどうかを確認します(符号を除いて同じ方向を持ちます)。この条件が満たされている場合-少し回転させます

于 2012-07-29T07:14:27.007 に答える
0

衝突ごとに角度を測定できると思いましたか? 今は適切なコードを投稿する時間はありません (例が必要な場合は今夜かもしれません) が、ボールと壁の間の衝突の角度をチェックする何らかのメカニズムを持つことができます。

正確に 90 度の場合は、ボールにフラグを立て (ユーザーデータまたは外部配列のいずれかで)、壁とそのボールの間の連続した 90 度の衝突の数の追跡を開始します。90 度の衝突が 2 回連続して発生した場合は、ボールがスタックしていると見なして少しずつ動かしてください。

于 2012-07-29T07:24:19.693 に答える