这篇是紧接Box2DAS3中如何拖动物体的,主要是演示如何应用b2DistanceJoint类,b2DistanceJoint类主要作用是使两个物体保持一定距离而不相互靠近,要创建b2DistanceJoint的实例须先创建b2DistanceJointDef的实例,在b2DistanceJointDef的定义中定义要相连的两个物体,以及两个物体上的两个连接点。
闪吧新社区.V`b9IbW&Sg闪吧新社区/PpE }0J:c){
修改 Box2DAS3中如何拖动物体 中的代码,如下:
闪吧新社区Yi'X1GJF
J`(Vd y,FTb5H.z01. 在其init()函数中增加创建distance Joint 链接部分。
for (i = 0; i < numBody-1;i++ ) { var body1:b2Body = bodys[i] as b2Body; var anchor1:b2Vec2 = body1.GetPosition(); var body2:b2Body = bodys[i + 1] as b2Body; var anchor2:b2Vec2 = body2.GetPosition(); var distanceJointDef:b2DistanceJointDef = new b2DistanceJointDef(); distanceJointDef.Initialize(body1, body2, anchor1, anchor2); distanceJointDef.collideConnected = true; distanceJoint = world.CreateJoint(distanceJointDef) as b2DistanceJoint; }
2. 定义一个类的实例变量drawSp,Sprite类型,用来绘制连接点。
private var drawSp:Sprite;
3. 在init()函数的最后将drawSp添加到显示列表。
addChild(drawSp);
闪吧新社区W'h�nw8MJ1m3C@b 4. 在onFrame()函数中添加绘制连接点的部分代码。
drawSp.graphics.clear(); for (var i:int = 0; i < numBody-1;i++ ) { var body1:b2Body = bodys[i] as b2Body; var body2:b2Body = bodys[i + 1] as b2Body; var vec1:b2Vec2 = body1.GetPosition(); var vec2:b2Vec2 = body2.GetPosition(); drawSp.graphics.lineStyle(1, 0xffffff); drawSp.graphics.moveTo(vec1.x*physScale, vec1.y*physScale); drawSp.graphics.lineTo(vec2.x*physScale, vec2.y*physScale); }
说明:其实可以用过Box2DAS3中的debug draw来自动绘制连接点,但本人对这个还不熟悉,还在学习中,以后有时间再改过来,暂时用熟悉的graphics来绘制了~~
原文地址:http://space.flash8.net/space/?628770/viewspace-432269.html