用Nape制作智商球模型

智商球也是一个基于物理引擎的益智类游戏,玩家通过点击舞台,可以创建一个关节,游戏主角会在这个关节的牵引下向这个方向移动,如下图所示。今天我们学习用Nape的PivotJoint关节来制作一个《智商球》(Catch the candy)模型。

PovitJointAnotherUse

其实呢,这个效果我们并不陌生,在PivotJoitn关节实现鼠标关节时,当鼠标快速移动时,鼠标位置与刚体之间就会出现类似的牵引效果。

原理上也很简单,创建一个PivotJoint关节,设置关节连接刚体一个是目标刚体,另一个是Space.world刚体(这是一个空刚体,我在PivotJoitn关节实现鼠标关节里曾讲过),设置节点anchor为目标刚体的坐标。

在实现鼠标拖动效果是,我们在鼠标移动事件处理函数中,更新节点anchor的坐标,这个更新频率是很高的,所以我看到的牵引效果并不明显。

在<智商球>游戏里,玩家是通过点击鼠标实现的牵引,所以要实现类似的效果,我们只要把MOUSE_MOVE事件处理函数中的代码,翻到MOUSE_DOWN事件处理函数就可以了。效果如下,点击舞台任意位置,开始牵引。

[swfobject]907[/swfobject]

完整的代码如下:

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

	/**
	 * @author yangfei
	 */
	public class T26_PivotJointAnotherUsage extends AbstractNapeTest {
		public function T26_PivotJointAnotherUsage(gravity : Number = 600) {
			super(gravity);
		}
		private var body: Body;
		private var joint : PivotJoint;

		override protected function onNapeWorldReady() : void {
			//创建目标刚体
			body = LDEasyNape.createCircle(275, 200, 30);
			//实例化牵引关节
			joint = new PivotJoint(napeWorld.world, body, Vec2.weak(), Vec2.weak());
			//设置关节是否有弹性,stiff为true表示没有弹性,false是有弹性
			joint.stiff = false;
			joint.active= false;
			//限制关节的牵引力,最大为1000*body.gravMass。默认是无穷大,这样目标对象会瞬间移动至鼠标位置
			joint.maxForce = 1000 * body.gravMass;
			joint.space = napeWorld;
		}

		override protected function mouseEventHanlder(event : MouseEvent) : void {
			super.mouseEventHanlder(event);
			if(event.type == MouseEvent.MOUSE_DOWN){
				///鼠标点击时,更新关节节点anchor
				joint.anchor1 = Vec2.weak(mouseX,mouseY);
				joint.active = true;
			}else if(event.type == MouseEvent.MOUSE_UP){
				joint.active= false;
			}
		}
	}
}

代码中有几点要特别注意:

  1. 设置关节的stiff属性。stiff表示关节是否有弹性,stiff为true表示没有弹性,false是有弹性。如果关节没有弹性,目标刚体会突然更新到目标位置。
  2. 限制关节的最大牵引力maxForce属性。关节的牵引力用maxForce属性表示,默认是无穷大,这样目标对象会瞬间移动至鼠标位置,这是我们不希望看到的,所以要设置maxForce属性,加以限制。

代码中用到了LDEasyNape,如果你不会用请参考这里

点击下载完整的源文件

联系作者

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

One Reply to “用Nape制作智商球模型”

回复 Darcy

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