2016-08-11 6 views
0

私は文字+数字である多くの変数を持っています。 forループで変数を記述することは可能ですか? コンパイラにエラー1084がないというエラーがあります。私はどのような識別子が意味するのか分かりません。行内に数字を持つAS3.0変数宣言

 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

アレイの使用方法を学びます。 [参考](http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7ee1.html) – DodgerThud

+0

@ haruka.k - 理解しましたか? – BadFeelingAboutThis

答えて

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

は、あなたがそれらをどうつもりか分かりません3つのオブジェクトのセットでは、クリーンなソリューションを推奨するのは難しいですが、おそらくコンテナクラスを作成するのはきれいで簡単です。

  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

私は@BadFeelingAboutThisに同意します。

しかし、ベクターを使用することもできますので、各ベクターに指定されたオブジェクトが含まれていることを確認してください。 なぜそれらのインスタンスに "P1 - > Pn"という名前を付ける必要があるのか​​分かりません... 本当にそうする必要がある場合は、ここでは無用です。

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を確認してください。