Box2Dのマウスジョイントで水風船っぽい動きじゃないようにする
マウスジョイントの水風船っぽい動きがががということで、それを何とかする方法。ベースはこの記事。
Box2Dといえばドキュメント不足で、ことマウスジョイントに関しては情報が皆無です。そんなわけでトライアンドエラーでやってみたところ、mouseDownHandlerを以下のように書き換えることで解決できました。
var vecMouse:b2Vec2 = new b2Vec2( event.stageX / world.m_debugDraw.m_drawScale, event.stageY / world.m_debugDraw.m_drawScale); if (!body.GetShapeList().TestPoint(body.GetXForm(), vecMouse)) { return; } mouseJointDef.target = vecMouse; mouseJoint = b2MouseJoint(world.CreateJoint(mouseJointDef)); mouseJoint.SetTarget(vecMouse);
if文は、マウスボタンが押された場所が車の上かどうかをチェックするためのものです。かなり雑な書き方をしてますが、本当はGetShapeList()で得られるリストに対してちゃんと処理を書いたほうがいいです。このif文を抜くと、どこでクリックしてもドラッグできるようになります。