2010-02-25 45 views
1

我遇到一些问题,AS3字符串实例名称动作脚本3

var eventChildren:XMLList = eventInput.channel.children(); 
var nr:Number; 
nr=0; 
for each (var eventInfo:XML in eventChildren) { 

    nr++; 
    trace(eventInfo.title); 
    var ev="ev"+String(nr); 
    var titl="title"+String(nr); 
    trace(ev); 
    trace(titl); 

    var newEV:Object = Object(ev); 
    var newTITL:Object = Object(titl); 

    trace(newEV); 
    trace(newTITL); 

    newEV.newTITL.text=eventInfo.title; 

} 

} 

这是我的代码,我试图设置标题值eventChild, ,因为我每个子实例对于一般的动作脚本来说是新的,特别是动作脚本3我并不真正知道我在这里做错了什么。我试图从eventChildren中的值中为ev1.title1,ev2.title2等设置文本,如下所示:first child,set ev1.title1,second ev2.title2等。关于我应该在代码中更改什么或想要查找某些信息的想法?

编辑:谢谢你的帮助,既解答了我正确的解决方案:

for each (var eventInfo:XML in eventChildren) { 

    nr++; 

    trace(eventInfo.title); 
    var ev="ev"+String(nr); 
    var titl="title"+String(nr); 
    //trace(ev); 
    //trace(titl); 

    var oTitle:Object = {}; // create object for the field titleXX 
    oTitle[titl] = {text:eventInfo.title}; // create and assign the field text to a new object 
    allFields[ev] = oTitle; // assign the title object to the field evXX 

} 

ev1.title1.text=allFields.ev1.title1.text; 
ev2.title2.text=allFields.ev2.title2.text; 
ev3.title3.text = allFields.ev3.title3.text; 
ev4.title4.text=allFields.ev4.title4.text; 

回答

2

EV和TITL被Strings而不是Object存在AS3没有EVAL,所以你将不能够要创建一个基于字符串名称一个新的变量。但你可以创建一个新Object,将根据您的ev串有一个字段:

var o:Object={}; 
o[ev]="...."; 

所以,如果我的EV s等于字符串“ev1”,您将拥有一个名为ev1的对象=> o.ev1 = ...

对于标题,您可以执行相同的操作,创建一个新的对象,该对象将具有基于TITL字符串:

var o:Object={}; 
o[titl]="..."; 

所以,如果TITL等于字符串“TITLE1”你将有一个名为TITLE1 => o.title1 = ...

同样的事情文本字段的对象,你必须创建一个Object来保存文本字段。

混合所有这些相关信息你结束了:

var eventChildren:XMLList = eventInput.channel.children(); 
var nr:Number=0; 
var AllFields:Object={}; 

for each (var eventInfo:XML in eventChildren) { 
    nr++; 
    trace(eventInfo.title); 
    var ev="ev"+String(nr); 
    var titl="title"+String(nr); 
    trace(ev); 
    trace(titl); 

    var oTitle:Object = {}; // create object for the field titleXX 
    oTitle[titl] = {text:eventInfo.title}; // create and assign the field text to a new object 
    allFields[ev] = oTitle; // assign the title object to the field evXX 
} 

// then you can have access to all your field within the object allFields 
trace(allFields.ev1.title1.text) 
trace(allFields.ev2.title2.text) 

参见本question为对象符号

+0

谢谢你,这对我帮助很大 – Raz 2010-02-25 16:25:20

2

您可以使用 '这个' 变量名:

this['mystring'] = new Object(); 
this.mystring.title = 'mytitle'; 

如果你在一个班级里面这样做,班级必须是动态的,以允许新成员:

dynamic public class MyClass extends MovieClip { 
    public function MyClass() { 
     this['mystring'] = new Object(); 
     this.mystring.title = 'mytitle'; 
    } 
} 

如果你的类不是动态的,你仍然可以做到这一点,但必须继续使用数组表示法,而不是点符号:

public class MyClass extends MovieClip { // not dynamic 
    public function MyClass() { 
     this['mystring'] = new Object(); 
     this['mystring'].title = 'mytitle'; 
    } 
}