好的,在这里试图记住AS2,让自己疯了,希望有更好记忆的人伸出援助之手......
基本上,我的问题是使用组合和'等待'组件 - 例如。一个Button组件 - 准备好附加一个点击处理程序......出于各种原因,我无法对整个设置做任何事情,所以这就是情况......
我在库中有一个movieclip,没有类,只有一个链接ID(“AttachMe”)。该剪辑内部有一个AS2 Button组件('btn')。
我有一个类获取对时间轴的引用,然后从库中附加mc,然后向该按钮添加一个事件侦听器。简单吧?
var foo:Foo = new Foo(this);
class Foo {
private var tl:MovieClip; // timeline
private var mc:MovieClip; // the attached movieclip
function Foo(t:MovieClip){
tl = t;
mc = tl.attachMovie("AttachMe", "mc", 10);
var b:Button = mc.btn;
b.addEventListener("click", Delegate.create(this, onClick));
}
private function onClick(e:Object):Void{
trace("Hi!");
}
}
这不起作用,因为b.addEventListener在我正在做的时候是未定义的......
真的,这里的最佳做法是什么?即这是一个真正的痛苦,我知道在添加事件处理程序之前,“等待”按钮组件(在这种情况下)初始化的情况。
可以做间隔/超时 - 讨厌这个想法。可以在mc上做enterFrame,在第一次调用时清除它然后添加handler..again,似乎错了。 onLoad不会为movieclip触发,所以无法添加(如果我使用继承和我可以使用onLoad的库动画片段的自定义子类)。
每种方式似乎都是一种黑客攻击,多次做的想法令人沮丧!多年来一定是死了,但我真的找不到任何直接提到问题和接受解决方案的东西......
任何想法都赞赏!
富
答案 0 :(得分:1)
是的,第三次尝试,我已经标记了其他删除的答案。在进入UIObject和Button课程之后,我想出了这个,这似乎有用:
import mx.utils.Delegate;
import mx.controls.Button;
import mx.events.EventDispatcher;
class Foo {
private var tl:MovieClip; // timeline
private var mc:MovieClip; // the attached movieclip
function Foo(t:MovieClip)
{
tl = t;
mc = tl.attachMovie("AttachMe", "mc", 10);
var b:Button = mc.btn;
EventDispatcher.initialize(b);
b.addEventListener("click", Delegate.create(this, onClick));
}
private function onClick(e:Object):Void
{
trace("Hi!");
}
}
这个重要的位是EventDispatcher.initialize(b);
,似乎迫使方法立即存在。