体验AS3.0(九)

      Flash 2006-2-21 17:28:00
在我们上个例子中,我们已经看到,我们现在已经使用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",当你需要重写继承来的方法时,你需要用到它。
标签集:TAGS:
回复Comments() 点击Count()
喜欢就顶一下

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
深度XP 雨林木风XP WinXP下载 世界之窗 深度系统 雨林木风 Ghost ghost系统盘 XP下载