在AS3中定位/访问硬编码的动画片段

时间:2013-11-08 00:01:43

标签: actionscript-3 flash events

我正在尝试使用较旧的Flash电影制作一块AS3代码。由约4000个关键帧组成的电影,并且定期向主时间轴添加静态影片剪辑。

在第120帧,将实例名称为playButtonMC的动画片段添加到舞台。 playButtonMC内部有button个名为playButton的实例。我想将click事件处理程序分配给来自主时间轴的此影片剪辑内的按钮,但是我无法从主时间轴上关键帧#121上的操作获得对影片剪辑的引用。

我试图徒劳无功:

var myMc:MovieClip = stage.getChildByName("playButtonMC") as MovieClip;
trace(myMc);
trace(playButtonMC);
trace(root.playButtonMC);
trace(stage.playButtonMC);

// If I get a reference, I plan to do following to attach event listener.
// Please advise if its incorrect as well
myMc.playButton.addEventListener(MouseEvent.CLICK, doStuff);

function doStuff():void{
    trace('called');
}

trace的所有来电都会产生null

我在任何意义上都不是Flash开发人员,但我已经完成了这项小任务。我知道正确的AS3方式必须通过动态生成影片剪辑并将引用存储在变量中,但此刻,我只是想让它以某种方式工作。

修改

trace(stage.playButtonMC);实际上会产生错误ReferenceError: Error #1069: Property playButtonMC not found on flash.display.Stage and there is no default value.

2 个答案:

答案 0 :(得分:1)

您确定该实例仍然存在吗?

stage!= root

使用root或使用this,以防您在MainTimeline实例上拥有代码。绝对不是舞台。

答案 1 :(得分:1)

如果您可以访问旧电影的源代码,最简单的方法是为您需要了解的实例添加getter和setter。查看您发布的代码,看起来您可能有权访问源代码,但出于某种原因,您使用的是时间轴代码而不是文档类。如果你打算使用时间轴代码,你可能只想用按钮把它推到框架上,不要再担心了。

如果您不只是注意ADDED_TO_STAGE(它不会冒泡,那么您需要在捕捉阶段观看)并进行筛选,直到找到您关心的内容为止。您可以打开name或getQualifiedClassName()或其他满足您需要的条件。

对于这两种技术的概述,您可以阅读this。示例代码here