今まで、物体同士は勝手に衝突していたのですが、ある程度コントロールできるようなのでテスト。
テスト用に円と四角を5個づつ作り、円と円、または四角と四角が衝突したら、色を変えてます。円と四角は衝突しません。
まずはプレビューを。
何かと何かが衝突した場合、b2Bodyクラスのm_contactListで取得できますので、以下のように毎フレーム実行。
GetManifoldCount()はヒットエリアを矩形か?(0)オブジェクトの形か?(1)を判断してます。
衝突するオブジェクトをコントロールするには、b2ShapeクラスのcategoryBits、maskBitsを使用します。 Mtok-blogさんの記事を参考にすると、body同士が重なった時に一方のcategoryBitsともう一方のmaskBitsの論理積(AND)が0でなかった場合に衝突するそうです。
壁、円、四角は以下のように設定すると、円と四角の場合は衝突しなくなりました。(ちょっと論理積に自信がありませんが・・・)
※ダウンロードしたソースはBox2DとTweenerにパスをつなげてください。
参考にした記事:
・Box2Dサンプル maskBitsによる衝突フィルタリング | Mtok-blog
・Box2d で降りしきる箱と戯れる箱 | parpue.net
衝突は他にもオブジェクトにid名を付けて、if文で分岐する方法や、
・Box2DFlashAS3での衝突判定 | FICC LABS
コンタクトリスナを使って検出する方法などあります。
・第7回 円を落として星を飛び散らせる|gihyo.jp
Box2DFlashAS3が2.0.2にバージョンUPした模様ですね。でもマイナーバージョンなんでスルーします。
Box2DFlashAS3 2.0.2 ダウンロードページ
テスト用に円と四角を5個づつ作り、円と円、または四角と四角が衝突したら、色を変えてます。円と四角は衝突しません。
まずはプレビューを。
何かと何かが衝突した場合、b2Bodyクラスのm_contactListで取得できますので、以下のように毎フレーム実行。
SOURCE:
for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
//衝突判別
for (var ce:b2ContactEdge = bb.m_contactList; ce != null; ce = ce.next) {
if (ce.contact.GetShape1().m_body.m_userData.id != "wall" && ce.contact.GetShape2().m_body.m_userData.id != "wall" && ce.contact.GetManifoldCount() == 1) {
var mc1 = ce.contact.GetShape1().m_body.m_userData;
var mc2 = ce.contact.GetShape2().m_body.m_userData;
mc1.changeColor();
mc2.changeColor();
}
}
}
※四方の壁に"wall"というidを設定してます。GetManifoldCount()はヒットエリアを矩形か?(0)オブジェクトの形か?(1)を判断してます。
衝突するオブジェクトをコントロールするには、b2ShapeクラスのcategoryBits、maskBitsを使用します。 Mtok-blogさんの記事を参考にすると、body同士が重なった時に一方のcategoryBitsともう一方のmaskBitsの論理積(AND)が0でなかった場合に衝突するそうです。
壁、円、四角は以下のように設定すると、円と四角の場合は衝突しなくなりました。(ちょっと論理積に自信がありませんが・・・)
SOURCE:
//壁 wallObject.filter.categoryBits = 0x0011; wallObject.filter.maskBits = 0x0011; //円 circle.filter.categoryBits = 0x0001; circle.filter.maskBits = 0x0001; //四角 rect.filter.categoryBits = 0x0010; rect.filter.maskBits = 0x0010;ソース
※ダウンロードしたソースはBox2DとTweenerにパスをつなげてください。
参考にした記事:
・Box2Dサンプル maskBitsによる衝突フィルタリング | Mtok-blog
・Box2d で降りしきる箱と戯れる箱 | parpue.net
衝突は他にもオブジェクトにid名を付けて、if文で分岐する方法や、
・Box2DFlashAS3での衝突判定 | FICC LABS
コンタクトリスナを使って検出する方法などあります。
・第7回 円を落として星を飛び散らせる|gihyo.jp
Box2DFlashAS3が2.0.2にバージョンUPした模様ですね。でもマイナーバージョンなんでスルーします。
Box2DFlashAS3 2.0.2 ダウンロードページ

