//以下转来的
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;
}
}
}
}
AS3 碰撞检测
最新推荐文章于 2015-01-08 14:42:36 发布