Nape柔体教程(2)
上一节,我们用关节的弹簧属性,仿真了一个弯曲后可以自动恢复的矩形橡胶棒。我想你肯定意犹未尽,今天我们来学习一下如何创建圆形柔体。
目前拉登大叔了解到的圆形柔体的创建方法有两种,本节介绍的是第一种,在emanueleferonato的博客中学到的方法,大体的思路是这样的:
- 沿着圆形的边长创建多个刚体segmentBody,相邻的刚体之间用关节sToSJoint连接起来。segmentBody越多圆形越逼真。
这样完成的效果就像绳索效果中,把绳子的两头系在了一起,开始可能是圆形的,但是掉到地上之后就摊到一起了,如下所示。[swfobject]987[/swfobject]
- 在圆心位置创建一个圆形刚体centerBody。用关节sToCJoint将每个segmentBody连接到这个centerBody刚体上。设置这些sToCJoint关节的damping和frequency属性,让它具有弹性。
这一步的作用就像是自行车轱辘中间的轴承和辐条,把周围的小刚体segmentBody支撑起来,让这个”外胎”不会瘪下去。
当然辐条的形变量是很小的,为的是让车轮不会瘪,而我们希望得到的是柔体,所以通过设置关节damping和frequency属性把这些辐条变软,实现柔体效果。完成后的效果如下所示。
[swfobject]988[/swfobject]
代码如下:
package learnNape { import nape.constraint.PivotJoint; import nape.phys.BodyList; import nape.geom.Vec2; import ldEasyNape.LDEasyNape; import nape.phys.Body; import learnNape.AbstractNapeTest; /** * @author yangfei */ public class T27_SoftBody extends AbstractNapeTest { public function T27_SoftBody(gravity : Number = 600) { } private var centerBody : Body; private var cx:Number = 200; private var cy:Number = 200; private var bodyNumbers:int = 10; private var radius : Number = 50; private var bodyList:BodyList; override protected function onNapeWorldReady() : void { centerBody = LDEasyNape.createCircle(cx, cy, 10); bodyList = new BodyList(); for (var i:int = 0; i<bodyNumbers; i++){ var angle : Number = Math.PI*2*i/bodyNumbers; var px : Number = cx + Math.sin(angle)*radius; var py : Number = cy + Math.cos(angle)*radius; var body :Body = LDEasyNape.createCircle(px, py, 5); bodyList.push(body); } var prevBody:Body, currBody:Body; for (var j:int=0;j< bodyList.length; j++){ prevBody=bodyList.at((j-1+bodyList.length)%bodyList.length); currBody=bodyList.at(j); var sToSJoint : PivotJoint = new PivotJoint(prevBody, currBody, Vec2.weak(), currBody.worldPointToLocal(prevBody.position)); sToSJoint.stiff = false; sToSJoint.space = napeWorld; var sToCJoint : PivotJoint = new PivotJoint(centerBody, currBody, Vec2.weak(), currBody.worldPointToLocal(centerBody.position)); sToCJoint.stiff = false; sToCJoint.damping = 1; sToCJoint.frequency = 5; sToCJoint.space = napeWorld; } } } }
看起来貌似不错,但是如果你看过Nape官网中的softBody示例,可能会和我一样,对这个简陋的柔体效果并不满意,没关系,下一节,拉登大叔将带你学习这个逼真的柔体效果。
点击下载源文件
联系作者
很久前学习starling的时候看到过nape,就学了点皮毛,今天看你的文章很有意思啊!支持支持啊!慢慢研究哈,写的不错,是个好老师
谢谢支持!有问题,欢迎过来跟我交流!
怎么你的节点都不显示是为什么啊,要怎么样才会不显示啊