Box2Dでオブジェクトに角度を付けた時に衝突判定が上手くいかない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
H.MAI

Box2Dでオブジェクトに角度を付けた時に衝突判定が上手くいかない

#1

投稿記事 by H.MAI » 9年前

現在Box2Dでオブジェクトを二つ配置し以下のように衝突判定の検査をしています。

コード:

for(b2Contact *iter = world.GetContactList(); iter != NULL; iter = iter->GetNext()){
    hitflag = TRUE;
}
見た目には衝突するとしっかりとお互いぶつかり合い
オブジェクトに角度をつけなければ前述の衝突判定のコードも問題なく
衝突してればTRUEしていなければFALSEとなります。

しかしオブジェクトに角度をつけると見た目の衝突は角度をつけてなかった時と同じように問題ないのですが
前述の衝突判定のコードの動作がおかしな動きをします。

(以下斜めの地面に四角いオブジェクトが乗っていると思ってください)

\□
  \
この場合は判定TRUEで問題ナシ

\  □
  \
この場合でも判定TRUEになってしまい問題あり
_____
\  |
  \|
 ̄ ̄
どうやらこの矩形の範囲で判定が行われている

\   □
  \
つまりここまでハミ出て初めてFALSEになる

※文字での説明で文字ズレが生じていましたら申しわけございません

これを普通に斜めに角度がついたオブジェクト同士でも
しっかり判定結果を返すようにするにはどうすれば良いでしょうか?
見た目の動きはまったく問題はなく、あくまでも前述のように
自力で衝突しているかどうかの判定をすると角度をつけた場合のみ問題が生じます。

H.MAI

自己解決しました。お騒がせ致しました。

#2

投稿記事 by H.MAI » 9年前

以下のように「IsTouching()」を入れる事で期待通りの動作をするようになりました。
お騒がせしまして申し訳ございませんでした。

コード:

for(b2Contact *iter = world.GetContactList(); iter != NULL; iter = iter->GetNext()){
    if(iter->IsTouching() == false){ continue; }
    hitflag = TRUE;
}

閉鎖

“C言語何でも質問掲示板” へ戻る