韩国电影女演员:学习as3的笔记15一个事件处理代码
来源:百度文库 编辑:九乡新闻网 时间:2024/03/29 06:53:16
第一个事件处理代码,这是殿堂之路里的例子
情况是陆云龙(客人类keren)去饭店点菜(事件类shijian),然后服务生(服务生类fuwu)做出回应,通过文档类Main来实现
在文档类Main中,生成一个客人对象lu,一个服务员对象fandian。服务员对象先在客人那里注册了对“点菜”事件的侦听,分配给了自身的diancai()方法。然后客人调用了order()方法来点菜,在order()方法中,发送了shijian事件对象。这样,事件就被服务员侦听到,实行了diancai,最后客人移除了服务员侦听。
第一个as文件 事件类shijian
package
{
import flash.events.Event; 导入事件类Event
public class shijian extends Event 继承
{
public static const ORDER:String = "点菜"; 静态属性
private var _dishes:Array; 用数组类型来储存点的菜名,下面用到
public function shijian() 构造器函数
{
super(ORDER); 将静态属性作为事件的默认类型 因为const,所以说这个值不会改变。
} 用get set 方法来访问上面的_dishes客人点菜的清单
public function get dishes():Array
{
return _dishes; 要返回与上面原来的一样,上面有说过
}
public function set dishes(dishesAry:Array):void
{
_dishes = dishesAry; 这里也一样要=上面的
} 如果不想用get set方法,就必须_dishes的访问权限改成public
} 其他涉及到dishes这个名称的都要改为_dishes。这有点不好,想一下
} 有谁去点菜会大声说让所有人都知道呢?所以尽量用访问权限紧点。
第二个as文件 客人类keren
package
{
import flash.events.EventDispatcher; 导入抽象类
public class keren extends EventDispatcher 继承
{
public var name:String; 声明字符串属性 服务生类会用到
public function keren(ns:String) 构造器函数
{
name = ns;
}
public function order():void
{
var orderDish:shijian=new shijian(); 生成shijian对象
orderDish.dishes = ["鸡肉","鸭肉","鱼肉"]; 点一些菜,放入上面shijian对象里的_dishes数组类型的属性里面
dispatchEvent(orderDish); 发送出这个事件,服务生类接收
}
}
}
第三个as文件 服务生类fuwu
package
{
public class fuwu
{ 下面的diancai这个方法就是用来接收上面发送出的shijian对象
public function diancai(evt:shijian):void
{
trace("你好,"+evt.target.name+"!你点的菜是:\r"+evt.dishes);
trace("我马上吩咐XX去做。"); target事件的目标,就是事件的
} 发送者,这个发送者是谁?是keren,客人里面的谁?在keren文件里有
}name这个属性,这个属性是个字符窜,这个字符串指向文档类里面的lu属性
} lu属性等于kenren,客人赋予它“陆云龙”这个字符串。所以通过逻辑,lu就是陆云龙,name就是lu——陆云龙,target事件的目标就是陆云龙,evt.target.name这一句输出的就是陆云龙。 evt.dishes这个道理是一样的,传到了shijian里的dishes,而这个dishes又被keren里的orderDish所引用,所以输出"鸡肉","鸭肉","鱼肉"。
最后, 文档类Main
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main()
{
var lu:keren = new keren("陆云龙"); 客人陆云龙,上面有说
var fantian:fuwu=new fuwu(); 生成一个服务员fandian
lu.addEventListener(shijian.ORDER,fantian.diancai);注册侦听器
Lu这个人进行点菜,就是说侦听了shijian里的点菜ORDER,和服务员类里的diancai方法
lu.order();客人lu执行keren里面的order方法,就是说lu点菜了(上面的侦听就是),要在order方法中发送orderDish
lu.removeEventListener(shijian.ORDER,fantian.diancai);
} 移除侦听器
}
}
完了以后,fla文件输出
你好,陆云龙!你点的菜是:
鸡肉,鸭肉,鱼肉
我马上吩咐XX去做。