Как создать тело платформы, которое вращается по центру в Box2D - PullRequest
2 голосов
/ 24 февраля 2011

Я пытаюсь создать вращающиеся фигуры, плавающие в пространстве. В окружающей среде все еще существует гравитация, однако это не должно влиять на эти объекты платформы, потому что они статичны (верно?). Как я могу применить к нему постоянную angularVelocity ? Кажется, он не применяется, когда я присваиваю ему значение, возможно, из-за его статичности.

Простейшим примером будет прядильное устройство , автоматическое качалка (не подверженная воздействию внешних сил) Все, что я пытаюсь сделать, это вращающийся прямоугольник, который может помешать контролируемому пользователем шару.

Нужно ли использовать Соединения , чтобы закрепить его на месте? Как я могу указать детали, на которые не влияют динамические объекты?

Спасибо всем, у кого есть ответ на этот вопрос!

1 Ответ

0 голосов
/ 24 февраля 2011

На самом деле, нашёл отличный ресурсный сайт, показывающий пример нескольких распространённых: http://blog.thestem.ca/archives/102

Важно отметить, что соединение само по себе в значительной степени бесполезно (или даже с присоединенным к нему только одним b2Body).

Всегда требуется, чтобы два (2) тела были связаны с его свойствами .body1 и .body2. Таким образом, чтобы «прикрепить» объект к миру / фону, вы должны создать «фиктивное» тело в качестве одного из двух кандидатов тела, в то время как другой будет вашим желаемым движущимся объектом. скорость и крутящий момент двигателя - это ключ к его «вращению», в отличие от управления angularVelocity или непосредственной манипуляции углом тела в методе обновления.

var pivotDef:b2BodyDef =    new b2BodyDef();
pivotDef.position.SetV( _b2body.GetWorldCenter() );
_b2bodyPivot =  b2WorldInst.CreateBody( pivotDef );

var jointDef:b2RevoluteJointDef =   new b2RevoluteJointDef();
jointDef.Initialize( _b2bodyPivot, _b2body, _b2bodyPivot.GetPosition() );
jointDef.motorSpeed =       1;
jointDef.maxMotorTorque =   10000000;
jointDef.enableMotor =      true;
jointDef.enableLimit =      false;

var joint:b2RevoluteJoint = b2WorldInst.CreateJoint( jointDef )  as b2RevoluteJoint;

-

Надеюсь, это сэкономит время другим физикам Флэша, чтобы выяснить это:)

...