如何在Box2D中创建一个旋转它的中心的平台体

时间:2011-02-24 17:00:57

标签: flash actionscript-3 velocity box2d spinning

我正在尝试创造漂浮在太空中的旋转形状。环境中仍然存在重力,但是它不应该影响这些平台对象,因为它们是静态的(对吗?)。虽然如何应用常量 angularVelocity 呢?当我为它赋值时,它似乎不适用,可能是因为它是静态的。

最简单的例子是旋转齿轮,一个自动 teeter-totter (不受外力影响)。我想要制作的是一个旋转的矩形,它可以干扰用户控制的球。

我是否需要使用关节将其固定到位?如何指定不受动态对象影响的细节?

感谢任何有此答案的人!

1 个答案:

答案 0 :(得分:0)

实际上,找到了一个很好的资源网站,展示了几个常见的例子: 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;

-

希望能够节省其他Flash物理学家一些时间来解决这个问题:)