如何在不导致错误1120的情况下从非文档类引用MovieClip的舞台实例?

时间:2016-05-24 07:52:09

标签: class actionscript-3 flash inheritance

我有一个基本的AS3问题,它与舞台上的对象和由AS3脚本创建和控制的对象之间的关系有关。这个问题已经被解决了很多次,我已经研究了好几个小时了,但我找到了截然不同的答案,其中许多都非常复杂。我正在寻找这个问题的最简单,最通用的解决方案,即人类(或者我应该说是计算机)可能。

我希望能够在不是主文档类的类中引用舞台上的对象实例。在我尝试用自己的术语解释之前,最好先查看其中一篇帖子,其中涵盖了我对此感到困惑的确切主题。如果您有任何人了解这个问题,并了解其中一个帖子的解决方案,也许您可​​以将一个正确的答案翻译成n00banese。你可以解释为什么有必要这样做,而不仅仅关注他们是如何做到的。如果有人能做到这么多,我会非常感激,如果可以的话,没有必要再读这篇文章了。

AS3 - Access MovieClip from stage within a class

How do I access a MovieClip on the stage from the Document Class?

AS3 Modify stage Objects from a class

how do I make non-document-class classes 'aware' of stage components in Flash AS3?

Accessing ActionScript3 Nested Movie Clips from Class

由于上述所有情况都很可能对我来说太复杂,我以最简单,最通用的方式重新创建问题,希望在这种情况下更容易解释。

我在舞台上有一个实例名称为scene_mc的MovieClip。除了将一个场景与另一个场景分开外,scene_mc什么都不做它链接到名为Scene的.as文件。嵌套在scene_mc中的是一个名为thing_mc的movieclip,链接到.as文件Thing。我想在场景中移动thing_mc。我可以通过更改主文档类中的坐标来轻松完成此操作,如下所示:

thing_mc.x = thing_mc.x + 100;

但是因为thing_mc嵌套在scene_mc中,所以我想控制thing_mc在SCENE类中的位置,以便坐标与该类中的其他嵌套符号相关。因为在更复杂的项目中,控制其父代码中的嵌套符号才有意义。所以在Scene.as中,我可能会创建这个方法:

public function moveThing() {
    thing_mc.x = thing_mc.x + 200;
 }

这会导致此错误:“1120:访问未定义的属性thing_mc。”

错误1120在任何时候尝试引用符号的舞台实例时都会发生.as文件不是主文档类。

重申我的问题,我如何让Scene类知道thing_mc是什么?或者我怎样才能让任何班级知道任何舞台实例是什么?如何通过非文档类引用对象的舞台实例?

哦!这可能会有所帮助。 Actioscript 3.0文档说明了这个 - 注意:Flash创作工具中放置在舞台上的子实例无法通过父实例的构造函数中的代码访问,因为在代码执行中尚未创建它们。在访问子代之前,父代必须通过代码创建子实例,或者延迟访问回调函数,该函数侦听子代理调度其Event.ADDED_TO_STAGE事件。

所以我的意思是,我真的明白为什么我要做的事情会导致错误,但我仍然无法解决这个问题。

任何真正读到我的胡言乱语的人,谢谢你。你是一个善良而有耐心的灵魂,哈哈。这个问题真的让我很生气,所以任何试图帮助我理解其工作原理的任何尝试都会非常受到重视。 :d

1 个答案:

答案 0 :(得分:0)

...根据我对所有人的理解后的理解(对不起,如果这不是你正在寻找的答案)

您需要链接Scene(Adobe Flash中的库中的对象(或Adobe Animate,如果您正在使用它))到您的班级。 (导出为Actionscript)但是(这里是踢球者)你还需要检查第1帧的导出并确保它在第1帧上加载。

当我没有注意时,我遇到了这样的问题。确保以某种方式嵌套在主动画片段中的动画片段被加载。无论是通过构造函数,还是在第1帧上。假设你的嵌套动画片段在第2帧上。好吧,flash没有加载第2帧。因此,它没有在第2帧内构造任何东西。所以它没有知道你在说什么。

有时候,我必须做一个gotoAndStop(2)然后再回到1只是为了让第2帧上的一个对象被命名并准备好在将来处理。

enter image description here