![]() |
Многомерные массивы в AS 3.0
Здравствуйте, я совсем недавно начал изучать Action Script 3.0 и у меня появился такой вопрос как создать двумерный массив?
В руководстве от Adobe был такой пример: Код AS3:
Заранее спасибо за ответ. P.S. Извиняюсь, если дублирую тему... искал не нашел... |
Код AS3:
|
Спасибо )
|
Дан такой код:
Код AS3:
1. Почему при инициализации нужно присвоить хотя бы какое-то значение ? В данном примере massiv:Array = []; Нельзя ли написать просто massiv:Array. Ведь в данном коде далее идет присвоение массиву значения massiv[ay][ax] = CELL_FREE. 2. Почему при задании длины массиву обращаться приходиться так massiv.length = M_HEIGHT;, а не так massiv[ay].length = M_HEIGHT;, а вместо massiv[ay].length = M_WIDTH; вот так massiv[ax].length = M_WIDTH; |
Цитата:
Цитата:
Кроме того, massiv[ay] - это элемент массива massiv, а massiv[ay][ax] - элемент массива massiv[ay]. |
goldlider, где вы этот код выкопали?
Код:
const M_HEIGHT = 15; // Строка |
КорДум, Поправь меня если я не прав. Т.е. получается, что для задания длины одномерного массива мы используем запись massiv.length = 50; не используя никакие квадратные скобки.
А при вызове массива в цикле используется запись massiv[i] Для двумерного массива мы используем запись massiv[j].length = 50; При вызове массива в цикле используется запись massiv[i,j] Для трехмерного массива massiv[j,k] = 50; При вызове массива в цикле используется запись massiv[i,j,k] Т.е. в квадратных скобках при задании длины пишется на одну переменную меньше. Добавлено через 4 минуты Цитата:
|
Да, так.
Цитата:
Цитата:
|
Цитата:
|
В ас3 нет многомерных массивов. Их можно сымитировать. В книге Мука как раз это и есть. 244 страница даже.
[ [], [], [], ..., [] ] - вот так имитируется двумерный массив. Его элементы - тоже массивы. Понятно теперь стало? |
Код AS3:
Т.е. вместо massiv[i][j] писать massiv[i + j*M_HEIGHT] и всех делов. |
Цитата:
Цитата:
|
Цитата:
@goldlider Цитата:
|
Psycho Tiger, я всегда считал, что это таблица, без вложенностей.
|
n мерный массив это последовательность элементов, где к каждый элементу осуществляется доступ через n-мерный индекс [][][].., в памяти массив всегда одномерный.
в as3 к сожалению не так. |
Цитата:
|
Одно измерение может не иметь фиксированный размер (см. выше как оно переиндексируется). Ну и в случае, когда хранятся указатели, можно договориться с типизацией.
|
Цитата:
|
"[]" - то же самое, что и "new Array()". _Заново_ выделять не надо. Но выделять надо.
Если мы хотим использовать массив, то мы его должны создать (выделить память). Если этот массив - элемент другого массива, то всё равно должны. |
De, что за белиберда получается. Как понять ваши слова "Заново выделять не надо. Но выделять надо."
В данном примере Код AS3:
|
Верно.
|
В смысле, что два и больше раз под одно и то же выделять не надо, конечно.
Код AS3:
|
а , кстате вопрос - массив с заданной заранее длиной элементов работает шустрее или по барабану?
|
На сколько я помню - для Array это безразлично. Для Vector есть разница, если он fixed
|
именно массив - абсолютно по-барабану, проверил ща несколько раз: 10к спрайтов создаются в массиве за 47-78мс без задания размера, с заранее заданным размером скорость прыгает так же 47-78мс
|
De, так вы говорите, что память для внутреннего массива в цикле выделяется один раз. Так ? Я просто понять вас немогу одни говорят одно, а другие совсем другое.
|
ну да, для каждого из внутренних массивов память выделяется только раз в этом примере, пример вполне годен и применим.
|
| Часовой пояс GMT +4, время: 19:13. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.