Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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));

Старый 29.10.2013, 02:47
nldr вне форума Посмотреть профиль Отправить личное сообщение для nldr Найти все сообщения от nldr
  № 2  
Ответить с цитированием
nldr
 
Аватар для nldr

Регистрация: Jul 2009
Сообщений: 48
Вот вам быстрый трикс.
Делаете еще один кусок (форму можно описать примитивом, кругом например) с большим density (density других кусков можно подогнать поэксперементировав, если вам надо фиксированную массу иметь), только чтобы он не вылазил за рамки других кусков (т.е. не создавал не нужных коллизий).
Позиционируете его в теле, там где надо центр тяжести и вуаля!

Старый 29.10.2013, 15:40
iters вне форума Посмотреть профиль Отправить личное сообщение для iters Найти все сообщения от iters
  № 3  
Ответить с цитированием
iters

Регистрация: Aug 2013
Сообщений: 14
спасибо, интересно попробывать,
я пытался через setMassDate , но как ни странно центр тяжести не отклонялся

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:49.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.