Вопросы о массиве Actionscript 3 / вопросы о многомерном массиве - PullRequest
0 голосов
/ 26 декабря 2009

Кажется, у меня проблема с областью массива. У меня есть глобальная переменная;

var itemConnect:Array = new Array();

Который инициализируется в начале. Затем у меня есть функция для заполнения его в виде двумерного массива:

// Draw connections
function initConnections() {
 for (var i:Number = 0; i < anotherArray.length; i++) {
  for (var j:Number = 0; j < anotherArray[i].length; j++) {
   itemConnect[i] = new Array();
   itemConnect[i][j] = new Shape();
  }
 }
}

Структура данных выглядит примерно так:

CREATE: i = 0, j = 1, val = [object Shape]
CREATE: i = 0, j = 14, val = [object Shape]
CREATE: i = 1, j = 2, val = [object Shape]
CREATE: i = 1, j = 3, val = [object Shape]
CREATE: i = 1, j = 4, val = [object Shape]
CREATE: i = 1, j = 5, val = [object Shape]
CREATE: i = 1, j = 6, val = [object Shape]
...

Если я пытаюсь получить доступ к этому массиву в другой функции, я просто получаю это:

i = 0, j = 14, val = [object Shape]
i = 1, j = 51, val = [object Shape]
TypeError: Error #1010: A term is undefined and has no properties.
 at main_fla::MainTimeline/mouseDownHandler()

Я попытался инициализировать массив в начале как двумерный массив следующим образом:

var itemConnect:Array = new Array();
for (var counti = 0; counti < anotherArray.length; counti++) {
 itemConnect[counti] = new Array();
}

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

i = 0, j = 14, val = [object Shape]
i = 1, j = 51, val = [object Shape]
i = 3, j = 47, val = [object Shape]
i = 6, j = 42, val = [object Shape]
i = 7, j = 42, val = [object Shape]
i = 8, j = 45, val = [object Shape]
i = 9, j = 42, val = [object Shape]
...

Кажется, у него есть доступ к области действия только для одного из каждого из узлов [i], поэтому [1] [2], [1] [3], [1] [4] отсутствуют - только последний [j ] появляется элемент.

Как правильно это сделать? Я также не знаю точный размер массива в начале, что может быть проблемой.

Спасибо

1 Ответ

0 голосов
/ 26 декабря 2009

Разве ваш вложенный цикл не должен выглядеть так?

function initConnections() {
    for (var i:Number = 0; i < anotherArray.length; i++) {
        itemConnect[i] = new Array();
        for (var j:Number = 0; j < anotherArray[i].length; j++) {
            itemConnect[i][j] = new Shape();
        }
    }
}

Обратите внимание, что в этой версии построение внутреннего массива происходит вне цикла, который предназначен для его повторения.

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