文档类:
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.filters.GlowFilter;
import flash.geom.Matrix;
import flash.geom.Point;
public class BitmapCollision extends Sprite {
private var bmpd1:BitmapData;
private var bmp1:Bitmap;
private var bmpd2:BitmapData;
private var bmp2:Bitmap;
public function BitmapCollision() {
stage.align=StageAlign.TOP_LEFT;
stage.scaleMode=StageScaleMode.NO_SCALE;
//make a star
var star:Star=new Star(50);
//make a fixed bitmap,draw the star into it
bmpd1=new BitmapData(100,100,true,0);
bmpd1.draw(star,new Matrix(1,0,0,1,50,50));
bmp1=new Bitmap(bmpd1);
bmp1.x=200;
bmp1.y=200;
addChild(bmp1);
//make a moveable bitmap,draw the star into it,too
bmpd2=new BitmapData(100,100,true,0);
bmpd2.draw(star,new Matrix(1,0,0,1,50,50));
bmp2=new Bitmap(bmpd2);
addChild(bmp2);
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMoving);
}
private function onMouseMoving(e:MouseEvent):void {
//move bmp2 to the mouse position(centered)
bmp2.x=mouseX-50;
bmp2.y=mouseY-50;
//the hit test itself
if (bmpd1.hitTest(new Point(bmp1.x,bmp1.y),255,bmp2,new Point(bmp2.x,bmp2.y),255)) {
bmp1.filters=[new GlowFilter()];
bmp2.filters = [new GlowFilter()];
trace(bmp1.x,bmp1.y )
} else {
bmp1.filters=[];
bmp2.filters=[];
}
}
}
}
生成Star的类:
package{
import flash.display.Sprite;
public class Star extends Sprite{
public function Star(radius:Number,color:uint=0xFFFF00):void{
graphics.lineStyle(0);
graphics.moveTo(radius,0);
graphics.beginFill(color);
//draw 10 lines
for(var i:int =1;i<11;i++){
var radius2:Number=radius;
if(i%2>0){
//alternate(轮换,交替) the radius to make spikes(尖状物) every other line
radius2=radius/2;
}
var angle:Number=Math.PI*2/10*i;
graphics.lineTo(Math.cos(angle)*radius2,Math.sin(angle)*radius2);
}
}
}
}