作者gargouille (lol)
看板Flash
标题Re: [问题]关於Listener的一些问题
时间Tue Mar 27 12:25:17 2007
※ 引述《etrexetrex (ETREX)》之铭言:
: addListener (MovieClipLoader.addListener 方法)
: public addListener(listener:Object) : Boolean
: 注册一个物件,当 MovieClipLoader 事件处理常式被叫用时,使用该物件来接收告知。
: 适用版本:ActionScript 1.0;Flash Player 7
: 参数
: listener:Object - 一个物件,用来侦听来自 MovieClipLoader 事件处理常式的回呼告
: 知。
: 传回值
: Boolean - 一个布林值。如果成功建立侦听程式,则传回 true;否则传回 false。
: ==
: 以上是flash的一个内建类别(MovieClipLoader)里的addListener 的说明
: 问题1:什麽是Listener,我认为是一个等待呼叫的函数,不过感觉怪怪的...
: 问题2:如果写自订类别,怎样让外部可以使用addListener,就像MovieClipLoader一样
: 问题3:像onPress这种东西,是物件导向观念的,一种等待呼叫的函数
: 不过我一直想不通的是以程序导向来说要作出物件导向应该如何做
: 我以为是类似以下:
: while() 或 onEnterFrame() =function()
: {
: if(当滑鼠点某个按钮)
: 呼叫onPress
: }
: 像这样不断的判断是否被呼叫,不过之前老师说过不是这样
: 那麽就效率来说,使用Listener会和上述的结构差很多吗?
: 希望懂这方面的版友可以教我 <(_ _)>
不好意思,先说在前面,这可能不是回答,而比较像是讨论
也想请更多有经验的人分享 ^^; 以下是我的使用经验
1.
就第一点而言,我也觉得listener是一个等待被呼叫的function
我用public function 也可以达到相同的效果
但是就是在於Listener 可以实现event Driven,也就是之後不管要再加什麽function
我只要再加一个listener 即可,而不用去修改主程式来呼叫这个function
2.
EventDispatcher.addEventListener()
向组件实体注册侦听程式。
EventDispatcher.dispatchEvent()
用程式设计方式传送事件。
Delegate
mx.utils.Delegate
dispatchEvent:Function
addEventListener:Function
removeEventListener:Function
这是一般我要用到事件来处理时会用到的东西
首先你要让一个不管是MovieClip 还是任何object能够去dispatch 一个event
用的是在constructor 里加上
mx.events.EventDispatcher.initialize(this);
这样他就有能力去发布一个event:
dispatchEvent({type:"evtName", target:this});
type 是指这个事件的名称,target是指目标
这边除了以上两个值一定要有之外,其他的东西是可以延伸的
只要包在Object里即可
ex:
var o:Object = new Object();
o.type = "onInit";
o.id = 0;
o.name = "gargouille";
dispatchEvent(o);
而接收的部份:
target.addEventListener("onInit", Delegate.create(this, initial));
意思是我向这个target监听这个onInit的事件
一但这个target丢这个事件出来时,我就去接来处理
然後丢给initial 这个function
function initail(e:Object):Void{
this.userID = e.id;
this.userName = e. name;
}
以上就是我的使用经验,还请大家高抬贵手,不要鞭的太凶 ^^||
而addListener 和 addEventListener之间的差别我也不是很清楚
这边只是提出我使用Listener还有自订事件的方法,希望对大家有帮助!
另外附上Delegate 的说明:
Delegate 类别可让您执行特定范围内的函数。此类别让您可以将相同事件传送
给两个不同的函数 (请参阅「使用元件」中的对函数委派事件),也可以呼叫所
包含类别范围内的函数。
当您将某个函数当作参数传送至 EventDispatcher.addEventListener() 时,
便会在广播程式组件实体范围内叫用这个函数,而不是这个函数在其中所宣告
的物件 (请参阅「使用元件」中的委派函数的范围)。
您可以使用 Delegate.create(),在所宣告物件范围内呼叫函数。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.210.181.188
1F:推 aquarianboy:推 :) 03/27 13:07