![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
|
Господа, что-то не могу понять одну вещь...
Вроде как массивы в FLASH могут быть сколь угодно многомерными, это обусловлено объектной моделью, да и в документации ограничение на размерность не нашел. А вот столкнулся таки со следующей неприятностью. Вот простой код. num=1;
logictab=new Array();
for(n=0;n<num;n++)
{
// Заполняются начальные таблицы
for(i=0;i<=9;i++)
for(j=0;j<=9;j++)
logictab[n,0,i,j]=0;
// В центр таблицы ставится игрок с направлением 1
logictab[n,0,4,4]=1;
}
// Проверяем, что лежит в массиве
for (y=0; y<9; y++)
for (x=0; x<9; x++)
trace("logictab x "+x+" y "+y+" is "+logictab[0,0,x,y]);
В результате я должен получить ... logictab x 7 y 3 is 0 logictab x 8 y 3 is 0 logictab x 0 y 4 is 0 logictab x 1 y 4 is 0 logictab x 2 y 4 is 0 logictab x 3 y 4 is 0 logictab x 4 y 4 is 1 logictab x 5 y 4 is 0 logictab x 6 y 4 is 0 logictab x 7 y 4 is 0 logictab x 8 y 4 is 0 logictab x 0 y 5 is 0 logictab x 1 y 5 is 0 ... А на деле вижу такую картину ... logictab x 7 y 3 is 0 logictab x 8 y 3 is 0 logictab x 0 y 4 is 1 logictab x 1 y 4 is 1 logictab x 2 y 4 is 1 logictab x 3 y 4 is 1 logictab x 4 y 4 is 1 logictab x 5 y 4 is 1 logictab x 6 y 4 is 1 logictab x 7 y 4 is 1 logictab x 8 y 4 is 1 logictab x 0 y 5 is 0 logictab x 1 y 5 is 0 ... Если это так, то можно ли изящно это ограничение обойти? |
|
|||||
|
Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
|
да, меня тоже это всегда убивает, забываю ставить a[0] = []; присваиваю сразу a[0][0] = 666; ((((
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
/*
arrayName - имя массива, если его не существует, то он создается
arrayD - индекс элемента для многомерного массива
arg - значение элемента
*/
arrayN = function (arrayName, arrayD, arg) {
if (!this[arrayName]) {
this[arrayName] = [];
}
var arrayTemp = this[arrayName];
var len = arrayD.length - 1;
for (var i = 0; i < len; i++) {
if (!arrayTemp[arrayD[i]]) {
arrayTemp[arrayD[i]] = [null];
}
arrayTemp = arrayTemp[arrayD[i]];
}
arrayTemp[arrayD[len]] = arg;
};
arrayN ('c', [1, 1], 50);
arrayN ('a', [5, 2, 3, 6], 100);
arrayN ('a', [5, 2, 3, 7], 200);
b = [2, 2];
arrayN ('b', [2, 0, 0, 1], 300);
////
trace (c[1][1]);
trace (a[5][2][3][6]);
trace (a[5][2][3][7]);
trace (b[0]);
trace (b[1]);
trace (b[2][0][0][1]);
|
|
|||||
|
Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
|
2 iNils
Ваш вышеприведенный код выдет следующее Может нужно где-то в настройках среды что-то выставить? Последний раз редактировалось xintrea; 28.07.2006 в 14:50. |
|
|||||
|
Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
|
Да, вставил.
Только вставил задом наперед - я привык в скриптовых языках функции размещать в конце. И поместил вашу функцию после вызывающих ее команд. Ну и получил сюрприз - ошибок нет, что использую неизвестную функцию, все молча работает только нужные действия не делает... Только что перенес в "верх" кода - заработало. В связи с этим вопрос - можно в двух словах объяснить, есть ли разница в классическом определении функций И тем как вы определяете функцию ? Последний раз редактировалось xintrea; 28.07.2006 в 15:22. |
|
|||||
|
Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
|
я что то не понял в чем прикол функции arrayN?
выдает Цитата:
выдает Цитата:
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Я воспользовался литералом функции.
Если сделать "классическим" способом, то функция будет доступна везде и даже до ее определения (это касается одного и того же кадра). А литералы функции будут доступны только после их определения. Поэтому если вам не нравится такой способ смените его на |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|