QuickBox2D 衝突のグループ分け


QuickBox2Dの各オブジェクトにはmaskBits, categoryBitsというパラメータがあり、maskBitsとcategoryBitsの論理積をとって0以外になれば衝突、0なら衝突判定はなしになる。


サンプル


ソース

package
{
	import com.actionsnippet.qbox.QuickBox2D;
	
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	
	[SWF(width=500, height=500)]
	public class QB_sample03 extends MovieClip
	{
		public function QB_sample03()
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			var sim:QuickBox2D = new QuickBox2D(this);
			
			//maskBitsとcategoryBitsの論理積をとって0以外になれば衝突する。0なら衝突はなし。
			
			/*

				categoryBits 1      0000 0000 0000 0001
				maskBits     0xffff 1111 1111 1111 1111
			*/
			sim.createStageWalls();
			
			/* 

				categoryBits 2 0010
				maskBits     3 0011
			*/
			for(var i:int = 0; i < 3; ++i)
				sim.addCircle( { x:1+5*i, y:2, radius:1, fillColor:0xFF0000, lineAlpha:0, fillAlpha:0.5, categoryBits:2, maskBits:3 } );
			
			/*
				三角
				categoryBits 4 0100
				maskBits     5 0101
			*/
			for(i = 0; i < 3; ++i)
				sim.addPoly( { x:3+5*i, y:2, verts:[[0, 0, 2, 2, 0, 2]], fillColor:0x00CC00, lineAlpha:0, fillAlpha:0.5, categoryBits:4, maskBits:5 } );
			
			/*
				四角
				categoryBits 8 1000
				maskBits     9 1001
			*/
			for(i = 0; i < 3; ++i)
				sim.addBox( { x:5+5*i, y:2, width:2, height:2, fillColor:0x0000FF, lineAlpha:0, fillAlpha:0.5, categoryBits:8, maskBits:9 } );
			
			sim.start();
			sim.mouseDrag();
		}
	}
}


参考サイト
http://blog.alumican.net/2009/07/05_024440