我正在尝试制作一个非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中的事件。有什么想法吗?
答案 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);
[Inspectable]
元标记允许代码用户在作者时修改属性。 This can be used to the extend of modifying properties belonging to a physics engine,现在这就是我所说的新手用户易于使用的内容。答案 1 :(得分:0)
答案 2 :(得分:0)
在主时间轴上访问变量或动画片段如下:
AS2:
_root.variable_name;
AS3:
MovieClip(root).variable_name;