2007/8/19

可拖曳、破撞的物件

這次是可拖曳、碰撞的物件,繼承了之前的拖曳類別,再加上碰撞的功能,可以與自已同類別的物件相互碰撞,產生動作

package {

import flash.display.*;
import flash.events.*;
public class myHitObj extends myDrawObj {

static public var dispatcher:EventDispatcher=new EventDispatcher();

public function myHitObj(my_name:String,r:uint,color:uint) {
this.name=my_name;

this.graphics.beginFill(color);
this.graphics.drawCircle(0,0,r);
this.graphics.endFill();

this.addEventListener(MouseEvent.MOUSE_DOWN,start_hit);
this.addEventListener(MouseEvent.MOUSE_UP,stop_hit);

dispatcher.addEventListener("hittest",hittest);
}
public function start_hit(e:MouseEvent):void {
this.addEventListener(Event.ENTER_FRAME,send_hit_test);
}
public function stop_hit(e:MouseEvent):void {
this.removeEventListener(Event.ENTER_FRAME,send_hit_test);
}
public function send_hit_test(e:Event):void {
dispatcher.dispatchEvent(new HitEvent("hittest",this));
}
public function hittest(e:HitEvent):void {
//trace("sender is "+e.sender.name+" , i am "+this.name);
if (this!=e.sender) {
//被碰撞後的動作
if (this.hitTestObject(DisplayObject(e.sender))) {
//trace("hit");
dispatcher.removeEventListener("hittest",hittest);//記得要先移除,不然還是會繼續聽事件
//this.parent.removeChild(this);//trace(this.parent);
this.addEventListener(Event.ENTER_FRAME,have_hit);
}
}
}
public function have_hit(e:Event):void {
scaleX+=0.05;
scaleY+=0.05;
if (scaleX>=2) {
this.removeEventListener(Event.ENTER_FRAME,have_hit);
}

}
}
}
import flash.events.*;
class HitEvent extends Event {
private var _sender:Object;
public function HitEvent(type:String,the_sender:Object) {
_sender=the_sender;
//trace("sender is "+sender.name);
super(type);
}
public function get sender():Object {
return _sender;
}
}

沒有留言: