Здарвсвуйте, у меня есть сложная невыпуклая фигура, я разбив её на 2 половины,описываю каждую половину в box2d.Тело получается, но с сильно смещенным центром тяжести в право, из-за этого получается очень много
косяков. Вот пример кода
Код AS3:
bodyDef = new b2BodyDef();
var val1:Number = 98 / meters + Math.cos(nAngle/180*Math.PI) * (71/meters);
var val2:Number = 348/meters - Math.sin(nAngle/180*Math.PI)*(71/meters);
bodyDef.position.Set(val1, val2) ;
bodyDef.type = b2Body.b2_staticBody ;
bodyShapePoligon = new b2PolygonShape() ;
bodyShapePoligon.SetAsArray([b2Vec2.Make( -26 / meters, 26 / meters), b2Vec2.Make( 8 / meters, -27 / meters),
b2Vec2.Make( 15 / meters, -19 / meters), b2Vec2.Make( 14 / meters, -6 / meters),b2Vec2.Make( 9 / meters, 5 / meters),b2Vec2.Make( -4 / meters, 20 / meters),b2Vec2.Make( -18 / meters, 26 / meters),b2Vec2.Make( -23 / meters, 27 / meters)], 8) ;
fixture = new b2FixtureDef() ;
fixture.shape = bodyShapePoligon;
fixture.friction = 0.9;
fixture.density = 10;
fixture.restitution = 0.5;
body = _world.CreateBody(bodyDef);
body.CreateFixture(fixture) ;
bodyShapePoligon = new b2PolygonShape() ;
bodyShapePoligon.SetAsArray([b2Vec2.Make( -28 / meters, 25 / meters), b2Vec2.Make( -31 / meters, 22 / meters),
b2Vec2.Make( -34 / meters, 14 / meters), b2Vec2.Make( -33 / meters, 6 / meters),b2Vec2.Make( -28 / meters, -10 / meters),b2Vec2.Make( -14 / meters, -22 / meters),b2Vec2.Make( 1 / meters, -29 / meters),b2Vec2.Make( 3 / meters, -29 / meters)], 8) ;
fixture = new b2FixtureDef() ;
fixture.shape = bodyShapePoligon;
fixture.friction = 0.9;
fixture.density = 5;
fixture.restitution = 0.5;
body.CreateFixture(fixture) ;
body.ApplyImpulse(new b2Vec2(Math.cos(-nAngle/180*Math.PI)*distance*20, Math.sin(-nAngle/180*Math.PI+9*Math.PI/20)*distance*20),
new b2Vec2(body.GetWorldCenter().x , body.GetWorldCenter().y));