As3 addEventListener事件监听传递参数

 
原文地址:http://blog.chengdu.cn/space.php?uid=85625&do=blog&id=41823
As3 addEventListener事件监听传递参数

var sayHello:String = "how are you";

btn1.addEventListener(MouseEvent.CLICK,function (e:MouseEvent){clickHandlerWithArg(e,sayHello)});

function clickHandlerWithArg(e:MouseEvent,arg:String):void

{

var out:String= e.target + "发出事件(有参数) :" + arg;

trace(out);

}

其实发消息的时候传参数在2.0里面是很方便的,但3.0里面要去写一个类去继承Event这个类,感觉麻烦了许多,在我学习3.0的初期一直不是 很理解到了3.0为什么变复杂了,所以刚开始经常会用到扩展Event这个类,但到后来发现只要程序的架构写好了,这种方法是可有可无了,不过今天还是要 讲解这种方法的使用.

    我们先写一个继承Event的类:

package net.smilecn{

import flash.events.Event;

public classMyEvent extendsEvent{

private var _object:Object;

public functionMyEvent(type:String,object:Object):void{
super(type);
_object
=object;
}

public functionget param():Object{
return _object;
}
}

}

    这个一个很简单的类,继承了Event这个类,在构造方法里有一个super(type),super的意思是执行父类的构造方法,也就是执行Event 的构造,type是消息的类型,就是消息的名字,一个字符串,object就是我们要传的参数要用到的一个变量,是一个对象,我们知道对象是很方便的,可 以存储1到多个参数,下面是一个GET方法,通过param这个名字去取_object这个对像的值.

    再来看一下怎么用这个MyEvent类,修改上一节中的文件;MyClass:

package net.smilecn{

import flash.display.Sprite;
import flash.events.MouseEvent;
import net.smilecn.MyEvent;

public classMyClass extendsSprite{

public functionMyClass(){
addEventListener
(MouseEvent.CLICK,clickHnadler);
}  

private function clickHnadler(event:MouseEvent):void{
dispatchEvent
(newMyEvent("myClassMessage",{a:100,b:200}));
}
}

}

    我们发现修改代码并不多,由new Event变成了net MyEvent,也就是说以前发的消息是as自带的Event事件,现在发的是我们自己写的MyEvent事件,再看参数还有一个 {a:100,b:200},这个参数就是我们传进去的对象,这个对象有两个属性值,一个叫a,值为100,一个叫b,值为200;

    再来看文档类:

package net.smilecn{

import flash.display.Sprite;
import net.smilecn.MyEvent;
import net.smilecn.MyClass;

public classMainForm extendsSprite{

private var myClass:MyClass;

public functionMainForm(){
myClass
= newMyClass();
addChild
(myClass);
myClass
.addEventListener("myClassMessage",myClassMessageHandler);

}

private function myClassMessageHandler(event:MyEvent):void{
trace
("你收到了myClass的消息:a="+event.param.a+" b="+event.param.b);
}
}
}

    文档类中修改的地方是侦听到消息后执行的方法,我们发现参数的类型变成了MyEvent,因为我们发的是MyEvent的事件,这里收到事件的类型当然是 MyEvent,在event.param就是去取MYEevent_object,就是我们在MyClass传过的对象了,event.param.a 的值就是100,event.param.b的值就是200,这样我们就达到了传递参数的目的了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值