Actionscript 3 操作脚本3中实例名称的字符串
我在as3上遇到了一些问题Actionscript 3 操作脚本3中实例名称的字符串,actionscript-3,Actionscript 3,我在as3上遇到了一些问题 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); trac
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等的文本,例如:第一个孩子、设置ev1.title1、第二个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;
ev和titl是
字符串
而不是,as3中没有eval,因此您将无法基于字符串名创建新变量。但您可以创建一个新变量,该变量将基于ev
字符串包含字段:
var o:Object={};
o[ev]="....";
因此,如果ev等于字符串“ev1”,那么您将拥有一个名为ev1=>o.ev1=
对于标题,您可以执行相同的操作,创建一个新对象,该对象将具有基于标题字符串的字段:
var o:Object={};
o[titl]="...";
因此,如果titl等于字符串“title1”,则将有一个对象,其字段名为title1=>o.title1=
同样,对于文本,您必须创建一个对象来保存文本字段
混合所有这些信息,您最终会得到:
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)
另请参见此,了解对象表示法ev和titl是字符串,而不是as3中没有eval,因此您将无法基于字符串名称创建新变量。但您可以创建一个新变量,该变量将基于您的
ev
字符串包含字段:
var o:Object={};
o[ev]="....";
因此,如果ev等于字符串“ev1”,那么您将拥有一个名为ev1=>o.ev1=
对于标题,您可以执行相同的操作,创建一个新对象,该对象将具有基于标题字符串的字段:
var o:Object={};
o[titl]="...";
因此,如果titl等于字符串“title1”,则将有一个对象,其字段名为title1=>o.title1=
同样,对于文本,您必须创建一个对象来保存文本字段
混合所有这些信息,您最终会得到:
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)
有关对象表示法,请参见此项。您可以使用“this”创建变量名:
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';
}
}
可以使用“this”创建变量名:
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';
}
}