2006/02/21 | 体验AS3.0(九)
类别(Flash) | 评论(0) | 阅读(193) | 发表于 17:28
在我们上个例子中,我们已经看到,我们现在已经使用addEventHandler来代替原来的onRelease。乍看起来,这样做比以前好象复杂了许多,但如果你接着往下看下一个复杂的例子的话,你将体会到这样做的好处。
我们要建立一个表格,整个表格将响应mouseUp事件,每个小格将响应新增的ReleaseEvent事件。
package {

import flash.events.Event;

import flash.events.MouseEventType;

import flash.util.trace;

import flash.display.Sprite;





public class Test extends Sprite{

public function Test() {

for( var i:int = 0; i<10; i++){

for( var j:int=0; j<10; j++){

var mc:Sprite= new Test2(i,j);

this.addChild( mc);

}

}

this.addEventListener("Release", releaseListener);

}



public function releaseListener( evt:Event){

trace( "Test1::releaseListener " + evt);

}

}



private class Test2 extends Sprite{



private var i:int;

private var j:int;



public function Test2(i:int, j:int){

this.i = i;

this.j = j;

graphics.beginFill(0xff0000);

graphics.drawRect(0, 0, 10, 10);

graphics.endFill();

x = i * 11;

y = j * 11;

this.addEventListener(MouseEventType.MOUSE_UP, mouseUpListener);

}



public override function toString():String{

return '[Test2 i=' + i + ' j=' + j + ']';

}



public function mouseUpListener( evt:Event){

trace( "Test2::mouseUpListener " + evt);

//we don't want this event to bubble up

evt.stopPropagation();



//instead we create a new event and dispatch it

this.dispatchEvent( new ReleaseEvent( this));

}

}



private class ReleaseEvent extends Event {

private var source:Test2;



public function ReleaseEvent( source:Test2){

super("Release", true, true);

this.source = source;

}



public override function toString():String{

return '[Event type="Release" bubbles=true '

+ 'cancelable=true source="' + source + '"]"';

}

  }



}
我们再也不用一个一个地分派事件了,这就为我们在运行时分派事件提供了可能性,新的事件机制在MovieClips 和components通用,我们现在只要学会这一种方法就足够了。
请注意一下新的关键字"override",当你需要重写继承来的方法时,你需要用到它。
0

评论Comments

日志分类
首页[186]
Flash[84]
FMS[41]
AIR[2]
ASP[11]
作品区[12]
其他[36]