Показать сообщение отдельно
Старый 28.10.2013, 23:49
iters вне форума Посмотреть профиль Отправить личное сообщение для iters Найти все сообщения от iters
  № 1  
Ответить с цитированием
iters

Регистрация: Aug 2013
Сообщений: 14
По умолчанию цеетр тяжеститела в box2d

Здарвсвуйте, у меня есть сложная невыпуклая фигура, я разбив её на 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));