衝突しない物体
作成中のクレヨンフィジックスもどきで二重の振り子を作って、子になる振り子が大きく振れたときに、親になる振り子の軸に使っているボディと衝突しないようにしたい。(振り子同士はジョイントの設定で既に衝突しない)
1. 軸のgroupIndexを -1 に設定
var pivotDef:b2BoxDef = new b2BoxDef(); pivotDef.groupIndex = -1;
先のエントリを信じるならうまくいくはずだけど失敗。理由不明。
2. 軸と衝突しないフィルタをワールドに設定
world.SetFilter(new PivotFilter()); class PivotFilter extends Box2D.Dynamics.b2CollisionFilter { public override function ShouldCollide(s1:b2Shape, s2:b2Shape):Boolean { var b1:b2Body = s1.GetBody(); var b2:b2Body = s2.GetBody(); if ( (b1.m_userData != null && b1.m_userData.type == 'pivot') && (b2.m_userData != null && b2.m_userData.type == 'pivot')) { return false; } else { return Box2D.Dynamics.b2CollisionFilter.b2_defaultFilter.ShouldCollide(s1, s2); } } }
なぜか駄目。
3. 軸のサイズをゼロに
var pivotDef:b2BoxDef = new b2BoxDef(); pivotDef.extents.Set(0, 0);
成功。
いいんか、これ?
1や2の方が絶対正しいやり方だと思うんだけど・・・。