Nape柔体教程(1)

上一节,我们用Nape实现了弹簧效果,今天我们将利用Nape刚体的damping和frequency模拟柔体效果。

今天要实现的效果是一个橡胶棒,想歪了的同学自觉去面壁啊!首先先看一下效果。下面的示例中,舞台中间竖着一根橡胶棒,试着用鼠标拖动它,松开鼠标时,橡胶棒又恢复了原来的形状!

[swfobject]966[/swfobject]

这个效果能做什么呢?这就仁者见仁智者见智啦,哈哈!开玩笑啦,掌握这个橡胶棒的实现方法,是实现官方柔体效果(后面会陆续讲解)的基础,所以请务必掌握本节内容。要实现这个效果并不难,通过几何简单的弹簧组合就可以搞定。图下图所示:

softbody1_explain

图中的bodyA和bodyB的左边两个顶点分别用一个pivotJoint1关节连接,然后我们通过设置damping和frequency属性,把这个PivotJoint设置为一个弹簧。同样的方法,刚体的右侧两个顶点用另一个pivotJoint2连接。那么当我们向左拉动刚体然后放开鼠标后,受到弹簧的作用,刚体会向右运动。反之,当刚体偏右时,弹簧会将其向左拉动。

以此类推,我们可以在bodyB下面加入bodyC、D等多个刚体,形成示例中的橡胶棒效果。

完整的代码如下:

package learnNape {
	import nape.geom.Vec2;
	import nape.constraint.PivotJoint;
	import ldEasyNape.LDEasyNape;
	import nape.phys.Body;
	import learnNape.AbstractNapeTest;

	/**
	 * @author yangfei
	 */
	public class T28_SoftBody1 extends AbstractNapeTest {
		public function T28_SoftBody1(gravity : Number = 600) {
		}

		private var bodyCount:int = 5;
		private var bodyWidth:Number = 10;
		private var bodyHeight:Number=30;

		private var bodyList : Vector.<Body>;

		override protected function onNapeWorldReady() : void {
			bodyList = new Vector.<Body>();
			for(var i: int = 0; i< bodyCount; i++){
				var b:Body = LDEasyNape.createBox(275, 350- bodyHeight*i, bodyWidth, bodyHeight,i==0);
				b.mass =0.01;
				bodyList.push(b);
				if(i>0){
					var b1:Body = bodyList[i-1];
					var leftAnchor:Vec2 = b.position.add(new Vec2(-bodyWidth/2,bodyHeight/2));
					var rightANchor:Vec2 = b.position.add(new Vec2(bodyWidth/2,bodyHeight/2));
					var leftJoint:PivotJoint = new PivotJoint(b1, b, b1.worldPointToLocal(leftAnchor), b.worldPointToLocal(leftAnchor));
					var rightJoint:PivotJoint = new PivotJoint(b1, b, b1.worldPointToLocal(rightANchor), b.worldPointToLocal(rightANchor));
					leftJoint.space = napeWorld;
					leftJoint.stiff = false;
					leftJoint.frequency = 30;
					leftJoint.damping = 30;

					rightJoint.space = napeWorld;
					rightJoint.stiff = false;
					rightJoint.frequency = 30;
					rightJoint.damping =30;
				}
			}
		}

	}
}

第28~32行:针对bodyList中存储的刚体,前后两个分别用leftJoint和rightJoint连接在一起。

第33~41行:设置关节的damping和frequency属性,用关节模拟弹簧,实现橡胶效果。

 

点击下载源代码

联系作者

公众号:拉小登 | 微博:拉登Dony | B站:拉小登Excel

3 Replies to “Nape柔体教程(1)”

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注