AS3高级变量用法 - 根据另一个变量中的值检索变量中的值

时间:2013-08-06 23:29:42

标签: actionscript-3 variables foreach

我正在创建一个项目,它允许我在XML文档中定义对象,并让flash创建所需的项目并在运行时显示。毋庸置疑,随着时间的推移,这是一个缓慢的进展。

我现在已经达到了一个障碍,相比之下应该非常容易。但我画了一个空白。尽管与我的好朋友谷歌花了几个小时,但我似乎无法用这句话来表达其他想要达到同样目标的人。

描述

目前我有一个菜单处理类,这是问题所在。将创建menuHandler类的实例。它通过调用一个传递两个字符串的类(LoadFramework)来使用。一个是XML文件的地址,另一个是XML文档中的标记,用于指定需要读取的部分。

XML文档由类加载,然后解析为变量。然后,根据传递的第二个字符串(XML标记的值),该XML文档的相应部分将被转换到屏幕上。这一切都很好,但这是抓住......

我设法使其工作的唯一方法是使用带有每个潜在标记的case的switch语句。然后我写了一个适当的for-each-in循环。以下是其中一个案例陈述的示例(除了" event.dat.XYZ.element"部分之外,它们都是相同的)。 " event.dat"是由自定义处理程序传递的变量,它包含XML数据。 XYZ是标签的名称(在这种情况下是" home")和每个"元素"是包含属性的标记。

case "home":
    for each (var menuField:XML in event.datPass.home.element) {
        mnDataHold.push(menuFieldHome);
        loopCount ++;
    } // for each (var menuField:XML in event.datPass.home)
    ActionMenu(loopCount);
break;

event.datPass中保存的XML示例。

<home label="home">
    <element label="menuType">HomeScreen</element>
    <element label="screenType">Game.assets.menuScreens.homeScreen</element>
    <element label="buttonCoords">400,50,400,100,400,150,400,200</element>
    <element label="buttonNames">baseButton,baseButton,baseButton,baseButton</element>
    <element label="labelCoords">440,51,425,101,430,151,438,201</element>
    <element label="labelTexts">Play,Options,Credits,More</element>
    <element label="labelColors">0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF</element>
    <element label="labelSizes">22,22,22,22</element>
    <element label="labelBolds">true,true,true,true</element>
    <element label="buttonCommands">startGame,diplaysMnuOptions,displayMnuCredits,displayMnuMoreGames</element>
</home>

请求 我想要做的是用变量替换for-each-in循环中的部分或全部对象,然后将该字符串作为引用进行评估,而不是将其用作值。

所以我最终可以放弃开关,只需要:

for each (var menuField:XML in [mnVariable]) {

mnVariable将包含字符串,例如&#34; event.datPass.home.element&#34;。 或者:

for each (var menuField:XML in event.dat.[mnVariable].element) {

mnVariable将包含字符串,例如&#34; home&#34;。

然而,从第一种方式开始,所有发生的事情都是for-each-in循环在mnVariable中查找找到menuField中的值,它不会找到它。写第二种方式它只会抛出一个错误。我需要[mnVariable]用于评估意义&#39;查看由此字符串命名的对象&#39;

很高兴收到任何指示。

1 个答案:

答案 0 :(得分:2)

通常不喜欢在XML中使用数据定义元素名称,但是 - 假设event.dat实际上是XML object,而不是您手动将XML解析为的任意对象(可以从问题中讲出来 - 这实际上是一个关于ECMAScript for XML(E4X)的问题,而不是一般的变量。

如果是这样,这应该有效:

for each (var menuField:XML in event.dat.child(mnVariable).element)
{
   // Do something
}

目前无法测试,但这也可能有效(它是E4X标准的一部分,但不确定Adobe是否实现了它):

// Note, no dot before the indexer:
for each (var menuField:XML in event.dat[mnVariable].element)
{
   // Do something
}

后者通常也是使用字符串属性名访问对象属性的方法,因此如果event.dat 手动解析XML的任意对象 - 而不是实际的XML对象 - 第二个例子也应该有用。