毕业论文 论文提纲 论文写作 公文范例 教育论文 教育学论文 师范教育 学术论文     论文指导*
                     
 
   
   
   
   
           
 

当前位置:课件115学培吧(kj115.com)→flash网侠教程(助你成为顶尖课件高手)→系列文章

 
 
标题:[5.使用 addEventListener 方法(EventDispatcher 类)]
 
展示台

文章来源 作者:admin 密码:admin 整理:湖北金鹰

◇网侠教程栏目简介
    提供FLASH侠客教程和网页制作侠客教程,高手进阶教程。
    浏览过这些资源的还浏览过经典教程图文教程游戏开发教程等相关资源。

---------------

湖北金鹰课件吧

论文相关服务
 

 

[5.使用 addEventListener 方法(EventDispatcher 类)]
打瞌睡了吧 貌似有口水流下来了.呵.本人文字表达能力不是很好(好像是没吃多少书).让大家见笑了.其实学编程
是比较闷的.不只是闷,还有很多很多,但既然选择了,这些就只是学习途中的坎,需要我们跨过去.就像是你选择走哪
条路一样,既然选择了,就必需是要走的.但这路不只是你一个人走,人多了就会有竞争,我们不能总走在别人后面.所
以需要加快脚步走在前面,让后面的人去追.但有时也会在不知不觉中走弯路,我一样也会,所以在本文中如果你看到
有不正确的,希望你能指正,谢谢.此文的目的是想让大家在这条路上能走快点.你很啰嗦呀....呵.题外话就说到这.
下面继续.
这一节讲 EventDispatcher 类.此类也是提供事件通知和侦听器管理功能的,但比前面讲的功能会强一些.在 AS2
中,此类用于组件的事件处理机制中.因 Macromedia 没有过多的讲解此类.很少人将它用于自定义类中.本人在研究
mx包下的类时才知道此类的用法.
首先看看在组件中如何使用:
1.
function clickHandler(evt:Object):Void
{
trace("click");
]
button.addEventListener("click", clickHandler);
2.
function click(evt:Object):Void
{
trace("click");

button.addEventListener("click", this);
3.
function handleEvent(evt:Object):Void
{
trace("click");
]
button.addEventListener("click", this);
4.
button.clickHandler = function(evt:Object)
{
trace("click");
}
这几种写法其效果都是一样的.都是侦听 button 实例的 click 事件.
下面来了解此类详细:
public addEventListener(eventName:String, 侦听器对象或函数):Void ---添加事件侦听器
public removeEventListener(eventName:String, 侦听器对象或函数):Void ---移除事件侦听器
public dispatchEvent(eventObj:Object):Void object:Object):Void
帮助文档中没有讲解 initialize 方法.此方法的功能同 AsBroadcaster 类的 initialize 方法一样.
该怎么用呢 看下面的示例:
[5.1.示例: EDEventClass 类(简单的示例)]
此示例文档详细:
Example/AS2/events/EDEvent/EDEventClass.as
Example/AS2/events/EDEvent/EDEventExample.as
Example/AS2/events/EDEvent/EDEventExample.xml
Example/AS2/events/EDEvent/EDEventExample.fla
主类:
打开 EDEventClass.as 文档,输入下面的代码:
import mx.utils.Delegate;
import mx.events.EventDispatcher;
//----------------------------------------
class EDEventClass extends EventDispatcher
{
//----------------------------------------
public var tXML:XML;
//----------------------------------------
public function EDEventClass(url:String)
{
this.tXML = new XML();
this.tXML.onLoad = Delegate.create(this, this.XMLonLoad);
this.tXML.load(url);
}
private function XMLonLoad(success:Boolean):Void
{
if (success) {
this.dispatchEvent({type:"complete"});
}
}
//----------------------------------------
}
如果不继承 EventDispatcher 类.请将代码改成如下:
import mx.utils.Delegate;
import mx.events.EventDispatcher;
//----------------------------------------
class EDEventClass
{
//----------------------------------------
//不继承需添加这三个方法.
public var addEventListener:Function;
public var removeEventListener:Function;
private var dispatchEvent:Function;
//----------------------------------------
public var tXML:XML;
//----------------------------------------
public function EDEventClass(url:String)
{
//还有使用 initialize 静态方法.
EventDispatcher.initialize(this);
this.tXML = new XML();
this.tXML.onLoad = Delegate.create(this, this.XMLonLoad);
this.tXML.load(url);
}
private function XMLonLoad(success:Boolean):Void
{
if (success) {
this.dispatchEvent({type:"complete"});
}
}
//----------------------------------------
}
保存文档.
这里首导入 EventDispatcher 类,你可以选择继承或不继承此类.上面的代码一个是继承,一个是不继承.区别
也很容易看出来.这里就不讲了.
示例类:
打开 EDEventExample.as 文档,输入下面的代码:
import EDEventClass;
//----------------------------------------
class EDEventExample
{
public function EDEventExample()
{
var ee:EDEventClass = new EDEventClass("EDEventExample.xml");
ee.addEventListener("complete", this);
}
private function complete(evt:Object):Void
{
trace("complete");
}
}
保存文档.
在示例类中我们创建主类的一个实例.来加载 EDEventExample.xml 文档.然后添加侦听器.
如果要移除事件侦听器,请使用下面的方法:
ee.removeEventListener("complete", this);
要加载的 XML 文档:
打开 EDEventExample.xml 文档,随便输入一些内容便可.测试用.
示例 fla 文档:
打开 EDEventExample.fla 文档.将"图层 1"重命名为 Actions.并在第一帧中输入下面的代码:
new EDEventExample();
保存文档.
测试 Flash 文档.在 XML 文档成功加载后会在输出面板中显示以下内容
complete
如需给事件传递参数,在发送事件时将参数添加事件对象(请看:1.事件处理机制)中,如下添加:
this.dispatchEvent({type:"complete", 参数1:"参数1", 参数2:"参数2", 参数N:"参数N");
在调用事件时:
private function complete(evt:Object)
{
trace([evt.type, evt.target, evt.参数1, evt.参数2, evt.参数N]);
}
下面再看一个示例:
[5.2.示例: EDTimer 类(定时器)]
此示例文档详细:
Classes/AS2/utils/EDTimer.as
Example/AS2/utils/EDTimer/EDTimerExample.as
Example/AS2/utils/EDTimer/EDTimerExample.fla
主类:
打开 EDTimer.as 类,输入下面的代码(当不急时,应多打代码(有利于巩固知识).不应 copy/paste):
import mx.utils.Delegate;
import mx.events.EventDispatcher;
//------------------------------
class AS2.utils.EDTimer extends EventDispatcher
{
//------------------------------
private var _timerID:Number;
private var _delay:Number;
private var _repeatCount:Number;
private var _currentCount:Number = 0;
private var _running:Boolean;
//------------------------------
/*
@parameter delay: 延迟,单位毫秒.
@parameter repeatCount: 重复次数.默认为Infinity(正无穷大);
*/
public function EDTimer(delay:Number, repeatCount:Number)
{
if (isNaN(delay)) {
return;
}
if (isNaN(repeatCount)) {
repeatCount = Infinity;
}
this._delay = delay;
this._repeatCount = repeatCount;
}
//------------------------------
public function reset():Void
{
this._currentCount = 0;
this.stop();
}
public function start():Void
{
this._timerID = setInterval(Delegate.create(this, this.startTimer), this._delay);
this._running = true;
}
public function stop():Void
{
clearInterval(this._timerID);
this._running = false;
}
public function toString():String
{
return "[EDTimer]";
}
//----------------------------------------
private function startTimer():Void
{
this._currentCount++;
this.dispatchEvent({type:"timer", currentCount:this._currentCount});
if (this._currentCount == this._repeatCount) {
this.reset();
this.dispatchEvent({type:"timerComplete"});
}
}
//------------------------------
public function get delay():Number
{
return this._delay;
}
public function set delay(d:Number):Void
{
this._delay = d;
}
public function get repeatCount():Number
{
return this._repeatCount;
}
public function set repeatCount(r:Number):Void
{
this._repeatCount = r;
}
public function get currentCount():Number

{
return this._currentCount;
}
public function get running():Boolean
{
return this._running;
}
//------------------------------
}
因此类详细前面已讲,功能一样,只是事件处理机制不同而已.这里就不再啰嗦.
示例类:
打开 EDTimerExample.as 文档,输入下面的代码:
import AS2.utils.EDTimer;
//----------------------------------------
class EDTimerExample
{
//----------------------------------------
public function EDTimerExample()
{
var te:EDTimer = new EDTimer(1000, 5);
te.addEventListener("timer", this);
te.addEventListener("timerComplete", this);
te.start();
}
private function timer(evt:Object):Void
{
trace("timer: " + evt.currentCount);

private function timerComplete(evt:Object):Void
{
trace(evt.type);
}
//----------------------------------------
}
示例 fla 文档:
打开 EDTimerExample.fla 文档,将"图层 1" 重命名为 Actions.并在第一帧中输入下面的代码:
new EDTimerExample();
测试 Flash 文档.输出面板会陆续显示以下的内容:
timer: 1
timer: 2
timer: 3
timer: 4
timer: 5
timerComplete

 

 
课件115学培吧(湖北金鹰)欢迎您!永久免费服务网址:http://www.kj115.com
   
 

学员众多的FLASH课件学习基地,成万免费FLASH课件制作教程在线学习,还有免费内容课件教程、视频教程、课件技巧、课件探讨、课件欣赏、课件展示、实用教程、课件界面、课件脚本、课件游戏、课件下载、课件封面、课文内容图片、课文人物图片库、课件素材、图片素材、声音素材、动物素材、背景图片、背景资料、背景边框、课件顶栏图片素材、Dreamweaver教程、Dreamweaver网页课件教程、软件下载。承接学习和培训,承接课件订制,课件修改等所有课件相关服务。
本站主要业务:┃flash课件制作视频教程培训┃承接全国竞赛flash课件┃论文代写代发┃代办课件国家级获奖证书┃
联系:QQ:444860709 手机:13339817386


 
 

业务办理
鄂ICP备08005724号