Actionscript 3 - 访问主时间轴

时间:2015-06-18 21:05:22

标签: actionscript-3 flash

我正在尝试制作一个非Flash用户很容易使用/重用来轻松显示内容的文件。这里的关键是这个文件是新手用户只需复制/粘贴一些非常小的代码来创建不同的“闪存卡”类型的swf文件的模板。

我正在创建的文件在主时间轴上有多个按钮,单击这些按钮时,会附加一个影片剪辑,该影片剪辑将显示一个动态文本区域,其中包含特定于所单击按钮的内容。文本区域的内容将从单独的文本文件加载。

为了这个例子,我只想引用一个按钮......

所以,在主时间轴上,在第1帧中,我有一个变量定义:

var myFilename1:String = "mySampleFile2.txt";

当主时间轴上的按钮按下第1帧时,将加载包含文本区域的影片剪辑。文本区域的内容位于该文件中:mySampleFile2.txt

如果我对文件名进行硬编码,那就像梦一样:

myTextLoader.load(new URLRequest("mySampleFile2.txt"));

但我不想硬编码文件名。我想在主时间轴中引用变量。在AS 2中,它本来是

myTextLoader.load(new URLRequest(_root.myFilename1));

在AS3中我认为它会是:

myTextLoader.load(new URLRequest(root.myFilename1));

OR

myTextLoader.load(new URLRequest(MovieClip(this.parent.root).myFilename1));

当我运行代码时,我收到以下错误,当我运行跟踪时,我得到的文件名为NULL

TypeError: Error #2007: Parameter url must be non-null.

如何访问主时间轴上变量中存储的文件名?

***************************更新! ********

所以我发现问题与屏幕上的按钮有关。按钮是按钮库中的按钮。如果我删除按钮,一切都很好。但是只要该按钮位于主时间轴上,它就会使我无法使用MovieClip(root).variable_name;访问变量。不幸的是,我希望该按钮触发MovieClip中的事件。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

不是个好主意

通过这种不良做法,你无法实现目标。

  

使用/重用

您要提供的代码不是非常可重用的。它严重依赖于某个地方存在的一个变量。因此,它不能在项目中使用两次。

  

但我不想硬编码文件名。

现在你很难对变量及其位置进行编码。如果您认为硬编码文件名是一件坏事,那么也认为这是件坏事。

问题是什么

基本上,问题是您的组件正在伸出手从项目中的某个位置获取此变量。但是,组件不应该关注它应该显示的内容。它封装得不好。

从现有的东西中学习

您想要显示文字。我们来看看TextField类,看看它是如何显示文本的。

var tf:TextField = new TextField();
tf.text = "hello";
addChild(tf);

如您所见,它应显示的文本是传递给TextField对象。正如您计划的那样,没有必要设置一些任意变量来修改文本:

var tf:TextField = new TextField();
var someArbitraryVariableThatModifiesATextField = "hello";
addChild(tf);

TextField对象没有明显的连接,如果有第二个TextField,这根本不起作用。

将其应用于手头的问题

就像TextField一样,您的“闪存卡”应该接收该文件作为参数。将其传递给构造函数,如下例所示,或者创建一个将其作为参数的方法。

var card:Card = new Card("mySampleFile2.txt");
addChild(card);

其他想法

  1. 创建其他方法以单独设置值。没有什么比一些完全符合要求的代码更糟糕了,但只对文件进行操作而没有文件。再次,目标是重用代码
  2. 使用[Inspectable]元标记允许代码用户在作者时修改属性。 This can be used to the extend of modifying properties belonging to a physics engine,现在这就是我所说的新手用户易于使用的内容。
  3. 而不是编写代码并因此需要再次重新编译文件,从嵌入到html页面中的传递给.swf文件的flashars中获取信息(文件路径或内容)。这使得单个.swf文件真正可重用且最容易使用,因为不需要任何As3编码。

答案 1 :(得分:0)

我没有测试过这个,但我相信“root”阶段会是:

this.parent

在孩子们的孩子们。

查看此问题:as3 access variable from parent swf

祝你好运!

答案 2 :(得分:0)

在主时间轴上访问变量或动画片段如下:

AS2:

_root.variable_name;

AS3:

MovieClip(root).variable_name;