de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 user717572
user717572
質問

2D AABBxAABBのどちら側が衝突したかを調べる

私はブレークアウト/レンガブレーカー/アルカノイドクローン(opengl-es /アンドロイド)を作っています。私はかなり長い間、私の衝突検出コードに固執しています。タイトルが示唆しているように:どのようにレンガの側面がボールに当たったのか分かりますか?

ある方向(xまたはy)で速度を逆転させる必要があるだけなので、レンガが当たったとき、私は考えることができます:

 if(speedY < 0) : left, upper or right
 else : left, bottom or right
 if(speedX < 0) : bottom, right or upper
 else : bottom, left or upper  

しかし、これは私が垂直または水平に衝突したかどうかを決定することには至りません。

私はインターネット上のいくつかのコード例を見てきましたが、それらはしばしば非常にあいまいで、複雑で、私にとっては話題にはなりません。

2 2011-10-27T21:03:56+00:00 2
 Raziel
Raziel
編集された質問 31日 5月 2016 в 3:02
プログラミング
collision-detection
2d
java
android
Brandon Buck
27日 10月 2011 в 9:30
2011-10-27T21:30:18+00:00
さらに
ソース
編集
#56793178

あなたがレンガの位置とボールの位置を知っていれば、各オブジェクトのテストを行い、レンガの側面を判断することができます。

左上の標準Java起源を仮定します:

   +----+
( )|    |
   +----+

If the ball's Max-X is < the Min-X of the brick, you know that it has to be on the left side, and vice versa with the right and left. You would also test the Y values for top and bottom collisions.

もちろん、これは衝突検出が最初に機能していることを前提としています。


編集


これはCollisionエンジンの抜粋ですが、これはほんの少しの例ですが、オブジェクトが衝突しているオブジェクトの左側にあるかどうかをテストする方法です。

else if ((oCenter.getX() < sCenter.getX()) 
        && ((oCenter.getY() < (sCenter.getY() + sourceHalfHeight)) 
        && (oCenter.getY() > (sCenter.getY() - sourceHalfHeight))))
    return LEFT;

ここの例では、 oCenter は Point2D で、ボールの中心です。 sCenter は Point2D で、長方形の中心です。 sourceHalfHeight は、長方形の高さの半分です(中心点 sCenter のオブジェクト)。

擬似コードアルゴリズム:

if (the center X of the ball < the center X of the rectangle
        AND the center Y of the ball is BETWEEN the max Y and min Y of the rectangle)
    then the ball is to the LEFT of the rectangle
end if
2
0
oleclerc
27日 10月 2011 в 9:33
2011-10-27T21:33:54+00:00
さらに
ソース
編集
#56793179

事は、ボールが2つの異なる時間に2つの異なる側を叩くことができるので、速度だけでそれを知ることができない、同じ方向に同じ速度で両方の時間。

例: 最初のラインはトップに当たって、2番目のラインはサイドに当たっていますが、どちらも同じスピードと方向を持っています

      /
    /  /
 _____  /
|_____| 

ボールの位置を使用して、それをレンガの両側と比較する必要があります

0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Денис Анненский
登録済み 1日前
2
365
登録済み 5日前
3
True Image
登録済み 6日前
4
archana agarwal
登録済み 1週間前
5
Maxim Zhilyaev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属