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

private var map:Array = [[25,25]];

Ive пробовал несколько способов, в том числе:

map[1][1] = 1;

Все, что он делает, это дает мне это:

ReferenceError: Error #1056: Cannot create property 1 on Number.

Ive тоже пробовал:

map[[1,1]] = 1;

Ничего не происходит, что я могу сказать

Единственный способ, который я пробовал до сих пор, дает мне результат, не являющийся ошибкой:

map[1,1] = 1;

Проблема здесь в том, что это выбирает всю строку. Любая помощь будет оценена по достоинству .. спасибо!

0
Mark9135 7 Мар 2015 в 20:38

2 ответа

Лучший ответ

Это неправильный способ создания 2D-массива:

private var map:Array = [[25,25]];

Этот массив содержит один массив, содержащий два элемента. Ко второму элементу нельзя обращаться так:

map[1][1] = 1;

Потому что второй элемент (массив) map не существует.

Вы можете создать 2D-массив следующим образом:

var map:Array = [];
for (var i:int = 0; i < rows; i++)
{
    map[i] = [];// this line adds new row to the 2D array

    // To fill the array by zeros add next loop
    for (var j:int = 0; j < cols; j++)
    {
        map[i][j] = 0;
    }
}
1
subdan 7 Мар 2015 в 18:44

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

var map:Array = [
    [25, 25],     // map[0] = [25, 25] ( array of two elements )
    35            // map[1] = 35 ( just a simple number )
];

Итак, если вы напишете:

trace(typeof map[1]);  // gives : number

Вы получите: number, и поэтому вы не можете правильно: map[1][1] = value;, и это нормально, что вы получили ошибку #1056.

Я не знаю, имели ли вы в виду присвоить значение 1 второму 25 из map[0] или действительно хотите добавить или отредактировать map[1][1] в первом случае, вы можете просто написать:

map[0][1] = 1;    // gives : map[0] = [25, 1]

Во втором случае вы можете:

map[1] = [any_other_value, 1];  // gives : map[1] = [any_other_value, 1]

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

var map:Array = [
    [25, 25]
];

Здесь также нельзя писать map[1][1] = value;, почему? Воспользуемся тем же методом:

trace(map[1]);   // gives : undefined

Поэтому убедитесь, что вы не можете добавить свойство в undefined, поэтому, когда вы пишете:

map[1][1] = value; 

Вы получите ошибку #1010: «undefined не имеет свойств.».

Конечно, здесь мы должны сначала создать map[1]:

map[1] = [];   // or directly map[1] = [any_other_value, value]

А потом :

map[1][1] = value;

Надеюсь, это поможет.

1
akmozo 7 Мар 2015 в 19:24