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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.12.2011, 18:05
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 11  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
Мне придётся использовать массивы 80*10. Многомерные. А в объектах можно хранить десятки свойств.

Старый 21.12.2011, 18:33
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 12  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
80 x 10 - это всего лишь двумерный массив.
А в дву- и более -мерных массивах тоже можно хранить массу свойств. Я, кстати, так и делаю.
Нужно правильно организовать структуру.

PS. В AS, по сути, массив - это тоже объект, только без визуального представления.
Так зачем превращать объект, имеющий визуальное представление, в хранилище данных?
Если проект куцый, то так можно сделать. если что-то посложнее - извольте структуру продумать более оптимально.

Добавлено через 5 минут
Код AS1/AS2:
var allitems:Array = new Array();
 
for (id = 0; id <= 80; id++) 
{
	allitems[id] = new Array();
}
 
allitems[0]['prop1'] = 'some property1';
allitems[0]['prop2'] = 'some property2';
 
allitems[1]['prop1'] = 'some property1';
allitems[1]['prop2'] = 'some property2';
//и т.д.
__________________
Идите первым!


Последний раз редактировалось mooncar; 21.12.2011 в 20:14.
Старый 21.12.2011, 18:40
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 13  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
Можете показать примрер добавления многомерных массивов. Предположим, у меня есть функция :

Код AS1/AS2:
function addClip(id,name,description,mass,usable,show)
{
   //....
}
В ней в массив ary должна добавиться эта запись.

Старый 21.12.2011, 18:43
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 14  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код AS1/AS2:
var ary:Array = new Array();
 
for (id = 0; id < 80; id++) 
{
	ary[id] = new Array();
}
 
function addClip(id, name, description, mass, usable, show)
{
   	ary[id]['name'] = name;
	ary[id]['description'] = description;
	ary[id]['mass'] = mass;
	ary[id]['usable'] = usable;
	ary[id]['show'] = show;
}
Обращение очень простое:
Код AS1/AS2:
trace(ary[20]['name'])
Добавлено через 3 минуты
Если заранее неизвестно, сколько id, не создаем заренее структуру 2-го уровня, то вариант просто создавать вложенный массив второго уровня по ходу, на лету:

Код AS1/AS2:
var ary:Array = new Array();
 
function addClip(id, name, description, mass, usable, show)
{
	if (ary[id] == undefined) ary[id] = new Array();//если слот под данный итем еще не создавали
   	ary[id]['name'] = name;
	ary[id]['description'] = description;
	ary[id]['mass'] = mass;
	ary[id]['usable'] = usable;
	ary[id]['show'] = show;
}
Таким образом, имеем БД, никак не связанную с происходящим на сцене, пока явно не изменим в ней данные, вследствие каких-то событий.
__________________
Идите первым!


Последний раз редактировалось mooncar; 21.12.2011 в 20:15.
Старый 21.12.2011, 20:15
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 15  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
А если ID каждый раз разные, посылаются из игры? Как можно присваивать порядковые номера каждому новому айтему?

Старый 21.12.2011, 20:17
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 16  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от Alex626 Посмотреть сообщение
А если ID каждый раз разные, посылаются из игры? Как можно присваивать порядковые номера каждому новому айтему?
Не очень понял вопрос. Возможно для этого - второй вариант, когда id заранее неизвестен:
Код AS1/AS2:
var ary:Array = new Array();
 
function addClip(id, name, description, mass, usable, show)
{
	if (ary[id] == undefined) ary[id] = new Array();//если слот под данный итем еще не создавали
   	ary[id]['name'] = name;
	ary[id]['description'] = description;
	ary[id]['mass'] = mass;
	ary[id]['usable'] = usable;
	ary[id]['show'] = show;
}
Или речь о том, что могут быть разные экземпляры одного и того же итема?
__________________
Идите первым!

Старый 21.12.2011, 20:35
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 17  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
Нет, ID это идентификатор сущности оружия, первый может быть 105, а второй - 5883. Т.е. сделать запись не по ID, а по порядковому номеру, запоминая номер последнего добавленного элемента, и наращивая его при добавлении.

Старый 21.12.2011, 20:43
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 18  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Вариант 1.

Тогда нужно иметь два основных массива - один - в котором описаны дефолтные и неизменяемые свойства - типа description, mass.
Второй - массив "активных" итемов, разных экземпляров разных итемов, у которых могут меняться нужные свойства, которые могут быть в игре разными. Как я понял по названию, это типа show?
Также у итема на сцене будет еще одно свойство, которое определяет, что это, собственно, за итем, то есть соответствие id из первого массива, сущность.

А при добавлении итема на сцену нужно производить определенные действия.

Код AS1/AS2:
var items:Array = new Array(); //БД видов итемов
 
for (id = 0; id < 80; id++) 
{
	items[id] = new Array();
}
 
function addDefault(id, name, description, mass)
{
   	items[id]['name'] = name;
	items[id]['description'] = description;
	items[id]['mass'] = mass;
}
 
addDefault(105, 'Палка', 'Палка для тыкания', 10);
addDefault(106, 'Ножик', 'Ножик для резания', 30);
//.... и .т.д.
 
var itemsInPlay:Array = new Array(); //БД экземпляров итемов в игре
var id_inPlay:Number = 0;
 
function addClip(id_itemType, show, usable):Number //возвращает, если надо id итема в игре (id_inPlay)
{
	id_inPlay++;
 
	if (itemsInPlay[id_inPlay] == undefined) itemsInPlay[id_inPlay] = new Array();//если слот под данный итем еще не создавал
 
	itemsInPlay[id_inPlay]['id_itemType'] = id_itemType;
	itemsInPlay[id_inPlay]['usable'] = usable;
	itemsInPlay[id_inPlay]['show'] = show;
 
	return id_inPlay; //если надо
}
В какой-то момент времени добавляем в игру итем с id = 2 - Ножик, его id в игре будет = 1.
Его show и usable = false
Код AS1/AS2:
addClip(105, false, false);
Вернет id = 1, то есть идентификатор итема в игре

В другой момент можно будет узнать другие свойства данного итема (т.е. типовые):
Сперва узнаем id (сущность в вашей терминологии)
Код AS1/AS2:
var id:Number = itemsInPlay[1]['id_itemType'];
затем по id уже неизменные свойства
Код AS1/AS2:
trace(items[id]['name']);
trace(items[id]['mass']);
trace(items[id]['description']);
На самом деле, это первое, что в голову пришло, могут быть другие реализации.

Вариант 2.

Можно иметь одну общую базу типовых итемов, и просто в неком свойстве типового итема указывать в виде некого свойства набор (вложенный массив) соответственных итемов на сцене, это еще одна или даже две вложенности, если с учетом индивидуальных свойств в игре.
__________________
Идите первым!


Последний раз редактировалось mooncar; 21.12.2011 в 21:23.
Старый 21.12.2011, 23:51
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 19  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
Я имел в виду просто запись по порядку. То есть у каждого айтема есть идентификатор в игре, и идентификатор порядкового номера элемента в инвентаре на Flash. Это ведь не самостоятельная игра на Flash, а просто файл интерфейса.

Например, есть предметы:

Код:
номер    id        name

1        34        MyWeapon1
2        766       Gun22
3        45675     Cannon1
4        22        Grenade45
итд.

При добавлении предмета в инвентарь функцией addClip, каждый объект получает свой порядковый номер, к которому можно обращаться. Например, есть массив ary, обращаемся к объекту номер 3, для свойства name:
Код AS1/AS2:
trace(ary[3]['name'])
//Cannon1


Последний раз редактировалось Alex626; 21.12.2011 в 23:55.
Старый 22.12.2011, 12:16
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 20  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Я именно это и имел ввиду в последнем посте.
Фразу "А при добавлении итема на сцену" можно считать за "А при добавлении итема в инвентарь".
И весь принцип тот же самый.
Код AS1/AS2:
id_inPlay++;
- это например отражает "каждый объект получает свой порядковый номер, "
и т.д.
__________________
Идите первым!

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

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

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


 


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


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