не может ссылаться на вложенный массив - PullRequest
1 голос
/ 07 октября 2010
var orb_strip:Array = new Array();
var orb_strip_matrix:Array = new Array(orb_strip);

public function OrbArray() //constructor.
{      
   for (var a:uint = 0; a < orb_strip_row_size; a++) 
   {

   //one for loop create an array of movieClips and draws them on the stage in a row. 

      for (var i:uint = 0; i < orb_strip_size; i ++) 
      {
         var orb:Orb = new Orb();

         // all the properties of each orb are created.

         orb.x = (i*50);
         orb.y = (a*100);
         orb.alpha = 0.3;
         orb.orbText.text = ("orb" + i);
         orb.label = "blank";
         orb.type = "speak";
         orb.mouseChildren = false; //?
         // more event listners but this time for each orb.
         orb.addEventListener(MouseEvent.MOUSE_OVER, orbMouseOver);
         orb.addEventListener(MouseEvent.CLICK, orbClick);
         orb.addEventListener(MouseEvent.MOUSE_OUT, orbMouseOut);

         orb_strip.push(orb); // an orb is born!
         addChild(orb);
      }

      orb_strip_matrix.push(orb_strip);

   }

orb_strip_matrix[1][3].alpha = 0.9;

}

Вот проблема, которая касается только сфер в верхней или нулевой строке массива.

Это вложено в другой цикл for, который создает массив строк movieClip.Проблема: я вижу их нарисованными и правильно расположенными на сцене, но я не могу ссылаться ни на что, кроме верхнего ряда, чтобы, например, изменить альфу.Я искал решение, но не могу найти какие-либо примеры, которые пытаются сделать это таким образом, поэтому сделать вывод, что вложенный цикл является неправильным способом сделать это?Любые идеи очень получили.

1 Ответ

0 голосов
/ 07 октября 2010

Я не запускал ваш код, поэтому не могу понять, почему не работает доступ Array, если честно, похоже, что должен!

Однако у меня естьпара вопросов, почему вам нужно, чтобы ваши шары были в двух массивах, и зачем они вообще нужны в массиве, вы сможете получить к ним доступ, как дети DisplayObjectContainer, в которых они сидят.

Относительно двух циклов for, вместо того, чтобы их вкладывать, выполните один цикл и используйте арифметику modulo для построения сетки шаров (по модулю обернут диапазон чисел, например, например,часы заводятся 24 часа.)

Например:

var orb_strip = new Array();

public function OrbArray() {
    var orbHorizontalSpacing:int = 50;
    var orbVerticalSpacing:int = 100;
    var orbRowSize:int = 10;
    var orbColumnSize:int = 10;
    var totalNumberOfOrbs:int = orbRowSize * orbColumnSize;

    for (var i:uint = 0; i < totalNumberOfOrbs; i ++) 
    {
        var orb:Orb = new Orb();
        // derive x from modulo totalNumberOfOrbs index (i) by orbRowSize.
        orb.x = (i%orbRowSize * orbHorizontalSpacing); 
        // derive y from totalNumberOfOrbs index (i) by orbColumnSize
        orb.y = (Math.floor(i / orbColumnSize) * orbVerticalSpacing);

        orb.alpha = 0.3;
        orb.orbText.text = ("orb" + i ); // i is now 0 to totalNumberOfOrbs
        orb.label = "blank";
        orb.type = "speak";
        orb.mouseChildren = false;

        orb.addEventListener(MouseEvent.MOUSE_OVER, orbMouseOver);
        orb.addEventListener(MouseEvent.CLICK, orbClick);
        orb.addEventListener(MouseEvent.MOUSE_OUT, orbMouseOut);

        orb_strip.push(orb); // an orb is born!
        addChild(orb);
    }
}

К которым все еще относится массив, если вы считаете, что он вам действительно нужен.

Обновление:

Я бы порекомендовал вам использовать модуль по модулю, чтобы определить, находится ли Orb в начале или конце строки, вместо 2D-массива ...

Но в отношении того, почему доступ к массиву не являетсяработает, ну, это научит меня не смотреть на ваш оригинальный код.У вас есть только один orb_strip массив, создаваемый на уровне класса, вам понадобится массив для каждой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...