Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.07.2006, 02:32
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 1  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
По умолчанию FlashMX не поддерживает четырехмерные массивы?

Господа, что-то не могу понять одну вещь...

Вроде как массивы в 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
...
О чем эта картина говорит? Мне кажется о том, что четвертая координата не рассматривается интерпретатором. Так ли это?

Если это так, то можно ли изящно это ограничение обойти?
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru

Старый 28.07.2006, 08:34
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не только четвертая, но уже и вторая:
посмотри что ты создаешь:
Код:
...
for(i=0;i<=9;i++)
   for(j=0;j<=9;j++){
	trace((n,0,i,j))
    	logictab[n,0,i,j]=0;
...
   }

Старый 28.07.2006, 12:03
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
4-мерный массив создается так
Код:
a = [[[[5]]]];
trace (a[0][0][0][0]);
//// или так
a = [];
a[0] = [];
a[0][0] = [];
a[0][0][0] = [];
a[0][0][0][1] = 6;
trace (a[0][0][0][1]);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 28.07.2006, 12:09
motor4ik вне форума Посмотреть профиль Отправить личное сообщение для motor4ik Посетить домашнюю страницу motor4ik Найти все сообщения от motor4ik
  № 4  
Ответить с цитированием
motor4ik
 
Аватар для motor4ik

Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
да, меня тоже это всегда убивает, забываю ставить a[0] = []; присваиваю сразу a[0][0] = 666; ((((

Старый 28.07.2006, 12:36
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: 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]);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 28.07.2006, 14:38
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 6  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
2 iNils

Ваш вышеприведенный код выдет следующее

Код:
undefined
undefined
undefined
2
2
undefined
Может нужно где-то в настройках среды что-то выставить?
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru


Последний раз редактировалось xintrea; 28.07.2006 в 14:50.
Старый 28.07.2006, 14:45
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
А вы функцию arrayN вставили?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 28.07.2006, 15:20
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 8  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
Да, вставил.

Только вставил задом наперед - я привык в скриптовых языках функции размещать в конце. И поместил вашу функцию после вызывающих ее команд. Ну и получил сюрприз - ошибок нет, что использую неизвестную функцию, все молча работает только нужные действия не делает...

Только что перенес в "верх" кода - заработало. В связи с этим вопрос - можно в двух словах объяснить, есть ли разница в классическом определении функций

Код:
function name(var1, var2)
{
 ...
}
И тем как вы определяете функцию

Код:
name = function(var1, var2)
{
 ...
};
?
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru


Последний раз редактировалось xintrea; 28.07.2006 в 15:22.
Старый 28.07.2006, 15:28
motor4ik вне форума Посмотреть профиль Отправить личное сообщение для motor4ik Посетить домашнюю страницу motor4ik Найти все сообщения от motor4ik
  № 9  
Ответить с цитированием
motor4ik
 
Аватар для motor4ik

Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
я что то не понял в чем прикол функции arrayN?

Код:
trace (c);
выдает
Цитата:
undefined,null,50

Код:
trace (a);
выдает
Цитата:
undefined,undefined,undefined,undefined,undefined,null,undefined,null,undefined,undefined,null,undefined,undefined,undefined,undefined,undefined,100,2 00

Старый 28.07.2006, 15:37
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Я воспользовался литералом функции.
Если сделать "классическим" способом, то функция будет доступна везде и даже до ее определения (это касается одного и того же кадра). А литералы функции будут доступны только после их определения.

Поэтому если вам не нравится такой способ смените его на
Код:
function arrayN (arrayName, arrayD, arg) {
...
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.