Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Box2D] соединение двух тел (http://www.flasher.ru/forum/showthread.php?t=172032)

provigator 30.11.2011 11:32

соединение двух тел
 
создаю 2 тела
Код AS3:

bodyDef=new b2BodyDef()
bodyDef.position.Set(c1.x/30, c1.y/30)                       
boxDef=new b2PolygonDef()
boxDef.SetAsBox((c1.width)/30/2, (c1.height)/30/2)
boxDef.density=1.5
boxDef.friction=0.5
boxDef.restitution=0.2
bodyDef.userData=c1
body=m_world.CreateBody(bodyDef)
body.CreateShape(boxDef)
body.SetMassFromShapes()
 
bodyDef=new b2BodyDef()
bodyDef.position.Set(c2.x/30, c2.y/30)                       
boxDef=new b2PolygonDef()
boxDef.SetAsBox((c2.width)/30/2, (c2.height)/30/2)
boxDef.density=1.5
boxDef.friction=0.5
boxDef.restitution=0.2
bodyDef.userData=c2
body=m_world.CreateBody(bodyDef)
body.CreateShape(boxDef)
body.SetMassFromShapes()

как соединить эти тела?
соединение должно быть жестким
версия 2.0.2

goodguy 30.11.2011 11:43

советую посмотреть в сторону b2WeldJoint. Но он мудреный.
Можно обойти используюя b2RevoluteJoint с отключенным вращением.

Но в этом коде я не вижу создания двух тел. Точнее оно есть, но обращаться по ссылке можно будет только к одному. Для соединения необходимо определить 2 переменных с типом b2Body, иначе это танцы с бубном

provigator 30.11.2011 13:47

нужен более подробный ответ в коде
1. как определить переменные
2. как создать соединение b2RevoluteJoint
соединение должно быть жестким
версия 2.0.2

goodguy 30.11.2011 15:19

Цитата:

1. как определить переменные
Какой-то странноватый вопрос. А ты этот-то код сам писал? Или копипаст?
Код AS3:

var body1:b2Body;
var body2:b2Body;

Как создаются шарниры есть в документации, довольно подробно. Я на версии 2.0.2 уже давно ничего не делал.
Вот пример для 2.1а

Код AS3:

 
var jointDef:b2RevoluteJointDef        = new b2RevoluteJointDef();
jointDef.Initialize(_body, _leftTrack, new b2Vec2(        _body.GetWorldCenter().x, _body.GetWorldCenter().y) );
_leftTrackJoint        = _world.CreateJoint(jointDef) as b2RevoluteJoint;
_leftTrackJoint.EnableLimit(true);
_leftTrackJoint.EnableMotor(false);


provigator 30.11.2011 16:21

этот код сам писал
почитал доки по 2.0.2
Код AS3:

var jointDef:b2RevoluteJointDef = new b2RevoluteJointDef();
jointDef.Initialize(body1, body2, myBody1.GetWorldCenter());

но все равно не понятно как определяются переменные для тел
я для этого и написал код на этапе создания тела

goodguy 30.11.2011 16:42

в моем коде телами являются _body и _leftTrack
достаточно передать их при инициализации шарнира

body1 и body2 были ответом на вопрос:
Цитата:

1. как определить переменные

provigator 30.11.2011 17:00

теперь немного прояснилось
не понятно как определить переменную и привязать к телу на этапе создания тела
этот момент поясни, я для этого и написал скрип создания двух тел

goodguy 30.11.2011 18:01

Код AS3:

body1 = m_world.CreateBody(bodyDef)

в первом блоке, и:
Код AS3:

body2 = m_world.CreateBody(bodyDef)

во втором

provigator 30.11.2011 18:24

да!!!

goodguy 30.11.2011 18:35

эта ошибка не имеет к бокс2д ни малейшего отношения.
Надо было определить переменную перед тем, как ее использовать
Код AS3:

// где-то вначале 
var body1:b2Body;
....
// где-то потом
body1 = m_world.CreateBody(bodyDef)

п.с. пиши код с пробелами, по крайней мере на форуме. Напрягает читать когда все слеплено в кучу


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

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