を知っていますか? またはそれらは既に衝突していますか?(body1.categoryBits & body2.maskBits)|| (body1.maskBits & body2.categoryBits)? BOX2D manualからBOX2D衝突グループ
答えて
:
6.2.3。フィルタリング
衝突フィルタリングは、形状間の衝突を防ぐためのシステムである です。 たとえば、自転車に乗っている という文字を作成するとします。 自転車を地形 に衝突させ、その人物を 地形と衝突させたいが、 文字を自転車 と衝突させたくない(重複しているため)。 Box2D は、カテゴリとグループを使用した衝突フィルタリング をサポートしています。
Box2Dは16個の衝突をサポートします カテゴリ。それぞれの図形について、 が属するカテゴリを指定することができます。 他のどのカテゴリを指定するか この図形が衝突する可能性があります。 たとえば、すべてのプレイヤー 同士が衝突していないと モンスターが他の各 と衝突していないが、プレイヤーとモンスターが 衝突すべき マルチプレイヤーゲームに指定することができます。これはマスキング ビットで行われます。たとえば:
playerShapeDef.filter.categoryBits = 0x0002; monsterShapeDef.filter.categoryBits = 0x0004; playerShape.filter.maskBits = 0x0004; monsterShapeDef.filter.maskBits = 0x0002;
衝突グループは、あなたが 不可欠なグループインデックスを指定できます。同じグループインデックス が常に衝突(正のインデックス)または が衝突しない(負のインデックス)のすべての シェイプを持つことができます。グループ は、自転車の のように、何らかの形で関連しているもの に通常使用されます。次の の例では、shape1とshape2は常に が衝突しますが、shape3とshape4は決して が衝突します。異なる グループインデックスの形状間
shape1Def.filter.groupIndex = 2; shape2Def.filter.groupIndex = 2; shape3Def.filter.groupIndex = -8; shape4Def.filter.groupIndex = -8;
衝突は カテゴリとマスクビットに従ってフィルタリングされます。 という単語では、グループフィルタリングはカテゴリフィルタリングよりも優先度が高い です。
BOX2Dのソースを見ると、それは次のようにcatgoryとマスクを比較する器具が異なるグループに属している場合(またはグループは0である)ことを示している:
bool collide = (filterA.maskBits & filterB.categoryBits) != 0 &&
(filterA.categoryBits & filterB.maskBits) != 0;
だから見た目両方の器具のマスクによって衝突が許容される場合にのみ衝突する。 (IE:ANDロジック)
これは、私がmaskBitsとcategoryBitsの仕組みを理解した方法です。 たとえば、objectA、objectB、objectCという3つのオブジェクトがあるとします。
各カテゴリオブジェクトの定義:
objectA.categoryBits = 0×0002を。
objectB.categoryBits = 0x0004;
objectC.categoryBits = 0x0008;
は次に、各categoryBitsため衝突ルールを定義maskBitsを設定:
- > ObjectAに皆(0xFFFFで)及び(&)と衝突しない(〜)をObjectB(0x0004は)
objectA.maskBits = 0xFFFF &〜0x0004;
- > objectBはobjectA(0x0002)または(|)objectC(0x0008)と衝突しますが、他にはありません。
objectB.maskBits = 0x0002 | 0x0008;
- > objectCはobjectA(0x0002)と衝突しますが、他にはありません
objectC.maskBits = 0x0002;
これが正しいかどうかわかりませんが、それは私にとっては効果的です。
HTH
、誰もがより一層の説明を探しているならば、私はここで詳細なチュートリアル作ら:私は壁や多くのプレイヤー(私たちのプレイヤーと敵を)使用している
http://aurelienribon.wordpress.com/2011/07/01/box2d-tutorial-collision-filtering/
を。私のプレイヤーと敵は壁に衝突しますが、お互いに衝突することはありません。私はこのようにして働いた。お互いに衝突しないように、groupIndexを負の値に設定する必要があります。このような備品を定義してください。
/* The categories. */
public static final short CATEGORYBIT_WALL = 1;
public static final short CATEGORYBIT_PLAYERS = 2;
/* And what should collide with what. */
public static final short MASKBITS_WALL = CATEGORYBIT_WALL + CATEGORYBIT_PLAYERS;
public static final FixtureDef WALL_FIXTURE_DEF = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f, false, CATEGORYBIT_WALL, MASKBITS_WALL, (short)0);
public static final FixtureDef PLAYERS_FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f, false, CATEGORYBIT_PLAYERS, MASKBITS_WALL, (short)-1);
あなたの身体に適用します。
AnimatedSprite player, enemy;
Body playerBody, enemyBody;
player= new AnimatedSprite(CAMERA_WIDTH/2, CAMERA_HEIGHT/2, this.playerRegion, this.getVertexBufferObjectManager());
playerBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld, player, BodyType.DynamicBody, PLAYERS_FIXTURE_DEF);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(player, playerBody, true, false));
enemy= new AnimatedSprite(CAMERA_WIDTH/4, CAMERA_HEIGHT/2, this.enemyRegion, this.getVertexBufferObjectManager());
enemyBody= PhysicsFactory.createCircleBody(this.mPhysicsWorld, enemy, BodyType.DynamicBody, PLAYERS_FIXTURE_DEF);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(enemy, enemyBody, true, false));
- 1. Box2Dの衝突検出?
- 2. Box2d衝突の問題
- 3. Box2d(cocos2d)の衝突検出
- 4. Libdgx Box2D - 衝突の検出
- 5. AndEngineとbox2dの衝突フィルタ
- 6. Box2Dの衝突のエラー
- 7. Box2D衝突検出エラー
- 8. 同時衝突によるBox2D衝突フィルタリング
- 9. BOX2D - Monsterとの適切な衝突
- 10. Box2d衝突。オブジェクトが変形する
- 11. どのように衝突を検出するが、box2dで衝突しない?
- 12. box2dで衝突位置を取得する方法
- 13. BOX2D衝突が予想さlibGDX Androidのよう
- 14. Box2dで衝突点を取得する方法は?
- 15. Box2D:ジョイントとの衝突をチェックしますか?
- 16. Box2Dのような円のたくさんの衝突
- 17. AndEngine/Box2d/Java - 静的ボディと動的ボディの衝突検出
- 18. cocos2d-xの衝突検出にbox2dを使用する方法
- 19. box2dのDistanceジョイントとの衝突を可能にする方法
- 20. Box2dを使用した衝突検出(Android用)?
- 21. Box2Dとのムービースタイルのショットガンの爆発(粘着性の衝突)
- 22. Box2d衝撃力ベクトル
- 23. 衝突()
- 24. 衝突++
- 25. box2d衝突グループは、自分のプレーヤーからの弾丸では不十分です
- 26. ActionScriptは衝突
- 27. クラスの衝突
- 28. オペランドタイプ衝突エラーストアドプロシージャ
- 29. ジェネリックコレクションの衝突
- 30. スプリングクラウドデータフローコンポーネントの衝突
ありがとう、それは私のために働いた。 – noob