Показать сообщение отдельно
Старый 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.