分享

flash as3.0 像素级的碰撞检测

 灵岩侠客 2011-09-01
flash as3.0 像素级的碰撞检测
2011-06-26 16:03


文档类:

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);
    }
   }
  }

 }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多