AS3.0变量声明,行中有数字

时间:2016-08-11 13:55:22

标签: actionscript-3 actionscript

我有很多变量,字母+数字。是否可以用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();

2 个答案:

答案 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);

不知道你打算用这三组对象做什么,很难推荐一个更干净的解决方案,但是创建一个容器类可能很简单:

  1. 创建一个类文件(文本文件),让它调用它PContainer.as并将其保存在与.fla文件相同的目录中。

  2. 使用此作为类文件的内容:

    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();
            }
        }
    } 
    
  3. 使用这样的类:

    //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