2009-12-26 3 views
0

У меня, похоже, проблема с массивом. У меня есть глобальная переменная;Actionscript 3 array scope/multidimentional array questions

var itemConnect:Array = new Array(); 

Что инициализируется в начале. Я тогда функция, чтобы заселить его как 2-й массив:

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

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

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] 
... 

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

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

Благодаря

ответ

0

Не ваш вложенный цикл имел в виду, чтобы выглядеть более, как это?

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

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

+0

Да; это определенно один вопрос. В вашем коде вы создаете новый массив [i] i * j раз - не то, что вы хотите. – Dirk