我有很多变量,字母+数字。是否可以用for循环表示变量? 编译器说它有一个错误1084缺少标识符。我不确定标识符的含义。
for(i=1;i>14;i++){
var "P"+i:MovieClip = new "p"+i();
var "R"+i:BitmapData = new BitmapData(500 , 500);
var "D"+i:Bitmap = new Bitmap();
}
而不是
var P1:MovieClip = new p1();
var P2:MovieClip = new p2();
var P3:MovieClip = new p3();
var R1:BitmapData = new BitmapData(500 , 500);
var R2:BitmapData = new BitmapData(500 , 500);
var R3:BitmapData = new BitmapData(500 , 500);
var D1:Bitmap = new Bitmap();
var D2:Bitmap= new Bitmap();
var D3:Bitmap= new Bitmap();
答案 0 :(得分:2)
它可以按照你想要的方式完成,但我说这是相当草率的架构:
for(i=1;i>14;i++){
this["P"+i] = new (getDefinitionByName("p" + i) as Class);
this["R"+i] = new BitmapData(500 , 500);
this["D"+i] = new Bitmap();
}
//to test if it worked
trace(this.P1, this.R1, this.D1);
不知道你打算用这三组对象做什么,很难推荐一个更干净的解决方案,但是创建一个容器类可能很简单:
创建一个类文件(文本文件),让它调用它PContainer.as
并将其保存在与.fla文件相同的目录中。
使用此作为类文件的内容:
package {
import flash.display.Sprite;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.MovieClip;
public class PContainer extends Sprite {
//create three properties for this class
public var bitmapData:BitmapData;
public var bitmap:Bitmap;
public var mc:MovieClip; //this assumes your P1 class is a movie clip
//this function runs when you do `new PContainer()`
public function PContainer(id:int):void {
bitmap = new Bitmap();
bitmapData = new BitmapData(500,500);
var cls:Class = flash.utils.getDefinitionByName("p" + id) as Class;
mc = new cls();
}
}
}
使用这样的类:
//create an array to hold all of them:
var pArray:Array = [];
//loop and create all the items
for(i=1;i<14;i++){
pArray.push(new PContainer(i));
}
//to access item 2, you'd do something like this: (arrays are zero based)
trace(pArray[1].mc);
答案 1 :(得分:1)
我同意@BadFeelingAboutThis。
但您也可以使用Vectors,因此您确定每个Vector都包含指定的对象。 我不知道你为什么要或者需要命名这些实例&#34; P1 - &gt; PN&#34; ... 如果你确实需要这样做,那么下面的代码就没用了。
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Bitmap;
var p:Vector.<MovieClip> = new Vector.<MovieClip>();
var r:Vector.<BitmapData> = new Vector.<BitmapData>();
var d:Vector.<Bitmap> = new Vector.<Bitmap>();
for(var i=1;i<14;i++){
// NOT for(i=1;i>14;i++)
var mc:MovieClip = new MovieClip();
var bmd:BitmapData = new BitmapData(500 , 500);
var bm:Bitmap = new Bitmap();
p.push(mc);
r.push(bmd);
d.push(bm);
}
var testIndex:uint = 5;
trace(("p"+testIndex.toString()) + " = " + p[testIndex]);
trace(("r"+testIndex.toString()) + " = " + r[testIndex]);
trace(("d"+testIndex.toString()) + " = " + d[testIndex]);
/*
output:
p5 = [object MovieClip]
r5 = [object BitmapData]
d5 = [object Bitmap]
*/
您应该添加try和catch块以查看索引是否在Vector范围内。 查看Vector reference