Actionscript 3 AS3从嵌套MovieClip访问时间线中的变量

Actionscript 3 AS3从嵌套MovieClip访问时间线中的变量,actionscript-3,flash,Actionscript 3,Flash,编辑:我自己解决了这个问题,并在下面给出了答案 在我的主时间线中有一个变量叫做characterDiscreated,它是一个布尔值。我还有一系列嵌套的MovieClips(MovieClips中的MovieClips),看起来像:Stage>Container>List>button 在嵌套底部的Buttons MovieObject中,我试图输出CharacterDiscreated的值,看看它是否可以看到或修改它: trace("characterDismissed is: " + cha

编辑:我自己解决了这个问题,并在下面给出了答案

在我的主时间线中有一个变量叫做characterDiscreated,它是一个布尔值。我还有一系列嵌套的MovieClips(MovieClips中的MovieClips),看起来像:Stage>Container>List>button

在嵌套底部的Buttons MovieObject中,我试图输出CharacterDiscreated的值,看看它是否可以看到或修改它:

trace("characterDismissed is: " + characterDismissed);
这显然不起作用,我理解为什么它不起作用(因为CharacterDisembled不是按钮ActionScript中的变量,而是主时间线的ActionScript中的变量,所以它还没有CharacterDisembled变量的概念。)

我将如何使AS3中的按钮MovieClip可以访问此变量?我尝试了root.characterdisembleed、parent.characterdisembleed、this.parent.characterdisembleed,甚至parent.parent.parent.characterdisembleed等。这些都会让我感觉到这个错误的味道,但是:

1119:通过静态类型为flash的引用对可能未定义的属性字符的访问被解除。显示:DisplayObjectContainer


我觉得我已经读了好几天关于处理这个问题的建议,但是什么都不起作用,而且我对AS3的理解已经很有限,我没有正确地掌握词汇来更好地研究我已经搜索过的内容,也没有弄清楚在其他论坛或类似论坛上通常会出现的模糊响应,但不是很正确的问题/答案。

我最终自己找到了答案,以下是我的想法:

我制作了一个新的ActionScript3.0类文件,并将其命名为GlobalVars(不过,您可以随意命名),并将其保存到我的项目目录中,与我的主.FLA文件一起。在GlobalVars中,我创建了一个名为testVar的测试变量,将其设置为public,然后设置为static

我的理解是,public意味着任何东西都可以修改它,static意味着这个变量在整个程序中都是相同的值。看起来是这样的:

public static var testVar:Number = 1234;
然后,在我的主项目AS3和嵌套对象的AS3中,我添加了:

import GlobalVars;
这会将我创建的类以及我在GlobalVariables中配置的任何函数或变量添加到时间轴上的主AS3脚本中

现在,我可以访问或更改那些AS3脚本中的变量,只需在变量前面加上类名,如下所示:

GlobalVars.testVar += 20; // Add 20 to testVar.
现在,只要我将GlobalVars导入到脚本中,我就可以从任何地方访问和修改这些变量


希望这能帮助那些发现自己缺乏词汇来正确表达对这个主题的搜索的人。我已经尝试在我的解释中加入尽可能多的关键词,以帮助有类似搜索查询的人。

我已经设法自己解决了这个问题。我在这里发布我的解决方案,希望它能帮助其他有类似问题的人,并且需要一个答案,而不会被其他人的代码细节所困扰。真的需要吗?同样的问题已经被多次提出/回答。是的,公共静态变量存在,并且在任何AS3编程书籍/教程中都有详细介绍。如果你选择忽略可用的学习材料,你最终会遇到这样的问题。。。你知道你想要什么,但不知道怎么做。因此,如果你一开始就做出正确的选择,那么你会因为在本可以有效学习的东西上浪费无数时间而感到沮丧。如果你不相信我,请尝试在这个网站上搜索“as3全局变量”或类似的东西。“我没有正确掌握词汇,无法更好地研究我已经搜索过的词汇”-给我找一本AS3初学者的书,里面没有解释公共静态变量及其用法。这是获得“正确理解”的最好方法。我已经开始阅读了。我在O'Reilly的LearnActionScript3.0中写了三章。我在词汇方面的问题是,有很多东西需要吸收,而且考虑到我是新来的,并不是所有的词汇都被吸收了。但是,谢谢你浪费时间,因为我无法保留所需的每一条信息,也无法立即回忆并将这些新的、非常陌生的词汇应用到我刚刚开始的项目中,所以你一直在唠叨我。