Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 操作脚本3中实例名称的字符串_Actionscript 3 - Fatal编程技术网

Actionscript 3 操作脚本3中实例名称的字符串

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

我在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);
    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';
    }
}