AS3 碰撞检测

//以下转来的

hitTest () 方法 public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean firstPoint: 表示从哪一点开始进行测试, 一般是new Point(), 即本bitmapdata的 0,0位置. 如果不是0,0(x,y),则表示从x,y之前的区域不参与计算. firstAlphaThreshold: 表示本bitmapdata参与测试时的alpha最小值,当此值小于BitmapData 构造方法的最后一个参数fillColor值的alpha值时才会测试成功. secondObject: 要测试目标. 用API中提供的例子来修改: import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd1:BitmapData = new BitmapData(80, 80, true, 0xfd000000); //设置alpha为0xfd, 即253 var rect:Rectangle = new Rectangle(20, 20, 40, 40); bmd1.fillRect(rect, 0xFF0000FF); var pt1:Point = new Point(31, 30); trace(bmd1.hitTest(pt1, 0xfe, pt1)); //当设置为0xfe时,为false, 只有小于等于0xfd才为true var pt2:Point = new Point(30, 30); //当设置为30,30时,为false, 因为pt1设置的是(31,30),即当前pt2的位置小于pt1的位置,所以不做测试计算. 所以当设置的位置大于(31,30)才返回true. trace(bmd1.hitTest(pt1, 0xfd, pt2)); 如果通过bitmapdata.draw(...)画出一个带有透明度的IBitmapDrawable对象,则在new Bitmapdata()时, 除了设置第三个参数为true外, 最后一个参数fillColor应该设置为 0x00ffffff.

package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import flash.filters.GlowFilter; import flash.geom.Matrix; import flash.geom.Point; [SWF(width="760",height="660", backgroundColor="#000000",frameRate="24")] public class only_test extends Sprite { private var bitMapData1:BitmapData; private var bitMap1:Bitmap; private var bitMapData2:BitmapData; private var bitMap2:Bitmap; public function only_test() { super(); init(); } private function init():void { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; //当前类加到舞台触发事件 this.addEventListener(Event.ADDED_TO_STAGE,onAddStage); } private function onAddStage(e:Event):void { var sp1:Sprite = new Sprite(); sp1.graphics.beginFill(0x78945612,1); sp1.graphics.drawRect(10,10, 50,50); sp1.graphics.endFill(); bitMapData1 = new BitmapData(50, 50, false,0x12345678); bitMapData1.draw(sp1, new Matrix(1,0,0,1,50,50)); bitMap1 = new Bitmap(bitMapData1); bitMap1.x = 50; bitMap1.y = 50; bitMapData2 = new BitmapData(50, 50, false, 0x45678912); bitMapData2.draw(sp1, new Matrix(1,0,0,1,50,50)); bitMap2 = new Bitmap(bitMapData2); addChild(bitMap1); addChild(bitMap2); stage.addEventListener(MouseEvent.CLICK, onClick); } private function onClick(e:MouseEvent):void { stage.removeEventListener(MouseEvent.CLICK, onClick); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove); } private function onMove(e:MouseEvent):void { bitMap2.x = mouseX- 25; bitMap2.y = mouseY-25; if(bitMapData1.hitTest(new Point(bitMap1.x, bitMap1.y), 255, bitMap2, new Point(bitMap2.x, bitMap2.y))) { bitMap1.filters = [new GlowFilter()]; bitMap2.filters = [new GlowFilter()]; } else { bitMap1.filters = null; bitMap2.filters = null; } } } }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值