【问题标题】:Targeting/accessing hardcoded movieclip in AS3在 AS3 中定位/访问硬编码的影片剪辑
【发布时间】:2013-11-19 21:11:00
【问题描述】:

我正在尝试使一段 AS3 代码与较旧的 Flash 电影一起使用。包含约 4000 个关键帧并定期将静态影片剪辑添加到主时间轴的影片。

在第 120 帧上,将实例名称为 playButtonMC 的影片剪辑添加到舞台。 playButtonMC 内部有一个名为 playButtonbutton 实例。我想从主时间轴将单击事件处理程序分配给此影片剪辑内的按钮,但我无法从主时间轴上的关键帧 #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.

【问题讨论】:

    标签: actionscript-3 flash events


    【解决方案1】:

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

    如果您不只是关注 ADDED_TO_STAGE(它不会冒泡,因此您需要在捕获阶段进行观察)并筛选直到找到您关心的内容。您可以打开 name 或 getQualifiedClassName() 或其他一些您想要的条件。

    有关这两种技术的简要说明,您可以阅读this。示例代码here

    【讨论】:

      【解决方案2】:

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

      阶段 != 根

      如果您的 MainTimeline 实例上有代码,请使用 root 或使用 this。绝对不是舞台。

      【讨论】:

      • 您好,感谢您的回答。是的,该实例从关键帧#120 到关键帧#220。我试过this.playButtonMC,但它跟踪null :(
      • 所以回顾一下:第 120 帧,名为 playButtonMC 的实例,直接添加到主时间线。您正在从同一帧跟踪 this.playButtonMC 或 root.playButtonMC 或 playButtonMC。你得到空值?
      • 是的,相同的框架但不同的层。我正在使用这个.... AND root.... 查看返回对象但都返回 null
      • 这真的很奇怪。你能把你的源文件上传到某个地方吗?
      猜你喜欢
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多