该怎么用呢? 看下面的示例:
[4.1.示例: AsBEventClass 类(简单的示例)]
此示例文档详细:
Example/AS2/events/AsBEvent/AsBEventClass.as
Example/AS2/events/AsBEvent/AsBEventExample.as
Example/AS2/events/AsBEvent/AsBEventExample.xml
Example/AS2/events/AsBEvent/AsBEventExample.fla
主类:
打开 CFEventClass.as 文档,输入下面的代码:
import mx.utils.Delegate;
//----------------------------------------
class AsBEventClass extends AsBroadcaster
{
//----------------------------------------
public var tXML:XML;
//----------------------------------------
public function AsBEventClass(url:String)
{
AsBroadcaster.initialize(AsBEventClass.prototype);
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.broadcastMessage("complete");
}
}
//----------------------------------------
}
保存文档.
这里首先继承 AsBroadcaster 类.然后在构造函数中使用
AsBroadcaster.initialize(AsBEventClass.prototype);
来获取事件通知和侦听器管理功能.最后使用
this.broadcastMessage("complete");
来广播消息或发送事件.
当然你也可以选择不继承它,但需要在类中添加下面的方法:
public var addListener:Function;
public var removeListener:Function;
private var broadcastMessage:Function;
示例类:
打开 CFTimerExample.as 文档.输入下面的代码:
import AsBEventClass;
//----------------------------------------
class AsBEventExample
{
public function AsBEventExample()
{
var ee:AsBEventClass = new AsBEventClass("AsBEventExample.xml");
ee.addListener(this);
}
private function complete():Void
{
trace("complete");
}
}
保存文档.
在示例类中我们创建主类的一个实例.来加载 AsBEventExample.xml 文档.然后添加侦听器.
如果要移除侦听器,请使用下面的方法:
ee.removeListener(this);
要加载的 XML 文档:
打开 AsBEventExample.xml 文档,随便输入一些内容便可.测试用.
示例 fla 文档:
打开 AsBEventExample.fla 文档.将"图层 1"重命名为 Actions.并在第一帧中输入下面的代码:
new AsBEventExample();
保存文档.
测试 Flash 文档.在 XML 文档成功加载后会在输出面板中显示以下内容
complete
如需给事件传递参数,在发送事件时如下添加参数:
this.broadcastMessage("complete", 参数1, 参数2, 参数N);
在调用事件时:
private function complete(参数1, 参数2, 参数N)
{
trace([参数1, 参数2, 参数N]);
}
下面再看一个示例:
[4.2.示例: AsBTimer 类(定时器)]
此示例文档详细:
Classes/AS2/utils/AsBTimer.as
Example/AS2/utils/AsBTimer/AsBTimerExample.as
Example/AS2/utils/AsBTimer/AsBTimerExample.fla
主类:
打开 AsBTimer.as 文档,输入下面的代码:
import AS2.utils.CFDelegate;
//----------------------------------------
class AS2.utils.AsBTimer extends AsBroadcaster
{
//----------------------------------------
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 AsBTimer(delay:Number, repeatCount:Number)
{
AsBroadcaster.initialize(AsBTimer.prototype);
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(CFDelegate.create(this, this.startTimer), this._delay);
this._running = true;
}
public function stop():Void
{
clearInterval(this._timerID);
this._running = false;
}
public function toString():String
{
return "[AsBTimer]";
}
//----------------------------------------
private function startTimer():Void
{
this._currentCount++;
this.broadcastMessage("timer", this._currentCount);
if (this._currentCount == this._repeatCount) {
this.reset();
this.broadcastMessage("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;
}
//----------------------------------------
}
因此类详细前面已讲,功能一样,只是事件处理机制不同而已.这里就不再啰嗦.
示例类:
打开 AsBTimerExample.as 文档.输入下面的代码:
import AS2.utils.AsBTimer;
//----------------------------------------
class AsBTimerExample
{
//----------------------------------------
public function AsBTimerExample()
{
var te:AsBTimer = new AsBTimer(1000, 5);
te.addListener(this);
te.start();
}
private function timer(currentCount:Number):Void
{
trace("timer: " + currentCount);
}
private function timerComplete():Void
{
trace("timerComplete: ");
}
//----------------------------------------
}
保存文档.
示例 fla 文档:
打开 AsBTimerExample.fla 文档,将"图层 1" 重命名为 Actions.并在第一帧中输入下面的代码:
new AsBTimerExample();
测试 Flash 文档.输出面板会陆续显示以下的内容:
timer: 1
timer: 2
timer: 3
timer: 4
timer: 5
timerComplete:
下一节讲:[5.使用 addEventListener 方法(EventDispatcher 类)]
[5.使用 addEventListener 方法(EventDispatcher 类)]
打瞌睡了吧? 貌似有口水流下来了.呵.本人文字表达能力不是很好(好像是没吃多少书).让大家见笑了.其实学编程
是比较闷的.不只是闷,还有很多很多,但既然选择了,这些就只是学习途中的坎,需要我们跨过去.就像是你选择走哪
条路一样,既然选择了,就必需是要走的.但这路不只是你一个人走,人多了就会有竞争,我们不能总走在别人后面.所
以需要加快脚步走在前面,让后面的人去追.但有时也会在不知不觉中走弯路,我一样也会,所以在本文中如果你看到
有不正确的,希望你能指正,谢谢.此文的目的是想让大家在这条路上能走快点.你很啰嗦呀....呵.题外话就说到这.
下面继续.