2016-08-11 4 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); 

Не зная, что вы собираетесь делать с теми, наборы из трех объектов, трудно рекомендовать более чистое решение, но, возможно, создание класса контейнера будет чистым и легким:

  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

 Смежные вопросы

  • Нет связанных вопросов^_^