QuickBox2Dを試してみた Joint

matsu45122010-08-04

Jointを利用して棒人間でも作ろうと思ったけどなかなかうまくいかない。。。


サンプル

package
{
	import com.actionsnippet.qbox.QuickBox2D;
	import com.actionsnippet.qbox.QuickObject;
	
	import flash.display.MovieClip;
	
	public class QB_3 extends MovieClip
	{
		private var SCALE:int = 30;
		public function QB_3()
		{
			//計算結果を画面に描画
			var sim:QuickBox2D = new QuickBox2D(this);	
			
			//画面に合わせて壁を作る
			sim.createStageWalls(); 
			
			var head:QuickObject = sim.addCircle( { x:stage.stageWidth/2/SCALE, y:stage.stageHeight/2/SCALE, radius:5/SCALE, lineThickness:3, fillAlpha:0} );
			var body:QuickObject = sim.addBox( { x:stage.stageWidth/2/SCALE, y:(stage.stageHeight/2+10)/SCALE, width:1/SCALE, height:10/SCALE, fillColor:0} );
			var leftHand:QuickObject = sim.addBox( { x:body.x-1/SCALE, y:body.y, width:1/SCALE, height:5/SCALE, fillColor:0} );
			var rightHand:QuickObject = sim.addBox( { x:body.x+1/SCALE, y:body.y, width:1/SCALE, height:5/SCALE, fillColor:0} );
			var leftLeg:QuickObject = sim.addBox( { x:body.x-1/SCALE, y:body.y, width:1/SCALE, height:5/SCALE, fillColor:0} );
			var rightLeg:QuickObject = sim.addBox( { x:body.x+1/SCALE, y:body.y, width:1/SCALE, height:5/SCALE, fillColor:0} );
			
			//bodyとheadを繋げる。この二つのオブジェクトの衝突判定を無効にする。
			sim.addJoint({a:body.body, b:head.body, collideConnected:false, x1:stage.stageWidth/2/SCALE, y1:(stage.stageHeight/2+5)/SCALE});
			sim.addJoint({a:body.body, b:leftHand.body, collideConnected:false, x1:body.x, y1:body.y-2/SCALE, y2:leftHand.y-2/SCALE, x2:leftHand.x});
			sim.addJoint({a:body.body, b:rightHand.body, collideConnected:false, x1:body.x, y1:body.y-2/SCALE, y2:rightHand.y-2/SCALE, x2:rightHand.x});
			sim.addJoint({a:body.body, b:leftLeg.body, collideConnected:false, x1:body.x, y1:body.y+1/SCALE, y2:leftLeg.y-2/SCALE, x2:leftLeg.x});
			sim.addJoint({a:body.body, b:rightLeg.body, collideConnected:false, x1:body.x, y1:body.y+1/SCALE, y2:rightLeg.y-2/SCALE, x2:rightLeg.x});
			//シュミレーション開始
			sim.start(); 
			
			// オブジェをドラッグ出来るようになる
			sim.mouseDrag(); 
		}
	}
}