![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 167
|
Мне придётся использовать массивы 80*10. Многомерные. А в объектах можно хранить десятки свойств.
|
|
|||||
|
Модрон-ветеринар
|
80 x 10 - это всего лишь двумерный массив.
А в дву- и более -мерных массивах тоже можно хранить массу свойств. Я, кстати, так и делаю. Нужно правильно организовать структуру. PS. В AS, по сути, массив - это тоже объект, только без визуального представления. Так зачем превращать объект, имеющий визуальное представление, в хранилище данных? Если проект куцый, то так можно сделать. если что-то посложнее - извольте структуру продумать более оптимально. Добавлено через 5 минут //и т.д.
__________________
Идите первым! Последний раз редактировалось mooncar; 21.12.2011 в 20:14. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 167
|
Можете показать примрер добавления многомерных массивов. Предположим, у меня есть функция :
В ней в массив ary должна добавиться эта запись. |
|
|||||
|
Модрон-ветеринар
|
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; } Добавлено через 3 минуты Если заранее неизвестно, сколько id, не создаем заренее структуру 2-го уровня, то вариант просто создавать вложенный массив второго уровня по ходу, на лету: 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. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 167
|
А если ID каждый раз разные, посылаются из игры? Как можно присваивать порядковые номера каждому новому айтему?
|
|
|||||
|
Модрон-ветеринар
|
Цитата:
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; }
__________________
Идите первым! |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 167
|
Нет, ID это идентификатор сущности оружия, первый может быть 105, а второй - 5883. Т.е. сделать запись не по ID, а по порядковому номеру, запоминая номер последнего добавленного элемента, и наращивая его при добавлении.
|
|
|||||
|
Модрон-ветеринар
|
Вариант 1.
Тогда нужно иметь два основных массива - один - в котором описаны дефолтные и неизменяемые свойства - типа description, mass. Второй - массив "активных" итемов, разных экземпляров разных итемов, у которых могут меняться нужные свойства, которые могут быть в игре разными. Как я понял по названию, это типа show? Также у итема на сцене будет еще одно свойство, которое определяет, что это, собственно, за итем, то есть соответствие id из первого массива, сущность. А при добавлении итема на сцену нужно производить определенные действия. 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; //если надо } Его show и usable = false Вернет id = 1, то есть идентификатор итема в игре В другой момент можно будет узнать другие свойства данного итема (т.е. типовые): Сперва узнаем id (сущность в вашей терминологии) затем по id уже неизменные свойства На самом деле, это первое, что в голову пришло, могут быть другие реализации. Вариант 2. Можно иметь одну общую базу типовых итемов, и просто в неком свойстве типового итема указывать в виде некого свойства набор (вложенный массив) соответственных итемов на сцене, это еще одна или даже две вложенности, если с учетом индивидуальных свойств в игре.
__________________
Идите первым! Последний раз редактировалось mooncar; 21.12.2011 в 21:23. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 167
|
Я имел в виду просто запись по порядку. То есть у каждого айтема есть идентификатор в игре, и идентификатор порядкового номера элемента в инвентаре на Flash. Это ведь не самостоятельная игра на Flash, а просто файл интерфейса.
Например, есть предметы: итд. При добавлении предмета в инвентарь функцией addClip, каждый объект получает свой порядковый номер, к которому можно обращаться. Например, есть массив ary, обращаемся к объекту номер 3, для свойства name: Последний раз редактировалось Alex626; 21.12.2011 в 23:55. |
|
|||||
|
Модрон-ветеринар
|
Я именно это и имел ввиду в последнем посте.
Фразу "А при добавлении итема на сцену" можно считать за "А при добавлении итема в инвентарь". И весь принцип тот же самый. - это например отражает "каждый объект получает свой порядковый номер, " и т.д.
__________________
Идите первым! |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:46. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|