[转载]AS3)Flash(非Flex)开发中通过事件传递参数的一种方法
之前我发过一篇Flex开 发中通过事件传递参数的文章,前几天又使用flash开 发一个小东西遇到在flash中 传递参数的问题。
以下是一个小例子,有两个函数,test()函数是来使用Loader加载一张图片,我们侦听下载完成事件,并传递一 个数字111作为参 数。(当然这个参数你可以自己定义,类型随意,我这个参数和加载是无关的,只是想演示通过事件可以传递参数)
函数onLoaderComplete(i:int)是loader事件完成的侦听函数,并包含参数(i:int),要传递参数,它的返回值类型必须是Function,并且函数中要定义另一个函数来接收事件var fun:Funciton=funcion(e:Event){},花 括号中即可按照正常侦听函数一样操作事件结果,并可
操作传递进来的参数 i 。
这两个函数如下:
public function test():void {
var n:int = 111;
var my_Loader:Loader = new Loader();
my_Loader.load(new URLRequest(test.png));
my_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderComplete(n));
}
public function onLoaderComplete(i:int):Function {
var fun:Function=function(e:Event)
{
trace(i);
this.addChild = e.target.content;
}
return fun;
}
============================================
另外一个例子:
舞台放个按钮,给按钮加个侦听,然后传一个参数 过去,我点按钮,在按钮点击事件处理函数中输出这个参数,同时我也输出事件类型:(注 意:这个例子是Flash CS5 AS3项目,可能和CS3、CS4看上去有区别)
代码:
效果:
-
关于事件的移除:
这种方式定义侦听后,可能会出现事 件侦听不好移除的问题,可以用这样的方式移除侦听:
EventDispatcher(event.currentTarget).removeEventListener(event.type, arguments.callee);