Revolute Joints(转动关节)

选取任意两个刚体就可以创建一个转动关节,且一个刚体的质量要为0。

要创建转动关节,需调用关节定义的Initialize方法:

public function Initialize(b1:b2Body, b2:b2Body, anchor:b2Vec2) : void

前两个参数表示要组成关节的刚体,第三个参数表示关节的节点位置。

在刚体创建完成后即可以创建关节,此关节只需创建一次,不像鼠标关节(b2MouseJoint)在模拟过程中要不断设置目标,而此关节在执行模拟过程中无需处理。

下面是核心代码:

var revRect:Rect = new Rect(20, 200, new Point(300, 200), new Point(0, 0), new RectSprite(), _container);
var revCircle:Ball = new Ball(10, new Point(300, 50), new Point(0, 0), new CircleSprite(), _container);
var massData:b2MassData = new b2MassData();
massData.mass = 0;
revCircle.body.SetMass(massData);

_revoluteJointDef.Initialize(revCircle.body, revRect.body, new b2Vec2(300/PhyOption.PHYSCALE,50/PhyOption.PHYSCALE));
_revJoint = PhyOption.getInstance().world.CreateJoint(_revoluteJointDef) as b2RevoluteJoint;

_container.graphics.clear();
_container.graphics.lineStyle(2, 0xff0000);
_container.graphics.moveTo(revCircle.displayObject.x, revCircle.displayObject.y);
_container.graphics.lineTo(revRect.displayObject.x, revRect.displayObject.y-revRect.displayObject.height/2);

例子:

原文地址:https://www.cnblogs.com/ywxgod/p/ywxgod_2010_05_14_0_28.html