Как задавать свойства предметов и передавать их персонажу?

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.

Как задавать свойства предметов и передавать их персонажу?

Сообщение Agiliter » 17 сен 2014, 10:27

Добрый день! Продолжаю работу над созданием инвентаря к игре. Реализовал базовый инвентарь, который состоит из слотов, в которые помещаются базовые предметы. Реализовал удаление, добавление, замену, drag-and-drop и пр.
Я реализовал класс инвентаря-сумки и инвентаря-надетых вещей. Между ними реализованы все операции. Теперь думаю над тем, как наделить каждый предмет так сказать индивидуальностью.
Есть базовый класс Item. Каждый предмет имеет свойства
  1. private var itemID:uint;//ID в некой таблице предметов
  2. private var price:uint;//цена
  3. private var description:String = "Обычный предмет";//Описание    
  4. private var typeItem:String;//Тип предмета, например, = "armor"
  5. private var imageName:String;//Путь к изображению для иконки предмета


При создании экземпляра класса задается только itemID
  1. public function Item(_itemID:uint)
  2. {
  3.     itemID = _itemID;
  4.     init();
  5. }


В init() каким-то образом по itemID должны задаваться остальные свойства. Наверное, из какого-нибудь внешнего файла или БД подгружать нужно. Я пока делаю тупо в классе, причем не заморачиваюсь и делаю ни для каждого itemID, а для диапазона
  1. if (itemID >= 0 && itemID < 1999)
  2. {
  3.     typeItem = "Armor";
  4.     imageName = "armor.jpg";
  5.     price = 100;
  6.     description = "Хорошая броня. Стоимость: " + String(price) + ". Вес: " + weight;
  7. }
  8.     else if (itemID >= 2000 && itemID < 3999)
  9.     {
  10.         typeItem = "Gun";
  11.         ...
  12.     }
  13.     else if ...

это временно. Потом буду думать как инициализировать по конкретному itemID.
Более важный для меня вопрос состоит в том, как предмет должен передавать свои свойства игровому персонажу при надевании.

Например, персонаж обладает рядом характеристик: жизнь, броня, урон, крит, уворот и пр.
Я надеваю на него броню, которая обладает характеристиками: жизнь, броня. При надевании как-то должны измениться характеристики персонажа. Я могу, конечно сделать что-то вроде персонаж.setHP(armorHP) и т.д. для каждой из характеристик. А если у всех предметов разные характеристики? Например, один щит повышает только здоровье, а другой повышает броню и уворот. Как это реализовывать? Я плохо представляю себе как реализовать класс персонажа и надевание на него предметов. Сами надетые предметы находятся в классе инвентаря-надетых вещей. Резюмирую:
1. Как наделить каждый предмет индивидуальностью? Нужно создавать для каждого предмета свой класс?
2. А если предметов сотни? У меня возникала идея воспользоваться декоратором. Правда, не знаю что из этого выйдет.
3. Или же каждому предмету задавать полный набор характеристик: жизнь, броня, урон, крит, уворот, и если предмет добавляет только броню, то остальные приравнять нулю.
4. Как собственно создать класс персонажа, чтобы в нем была информация пусты ли слоты инвентаря-надетых вещей, и чтобы добавлять характеристики надетых вещей.
5. Есть ли у кого-нить рабочий пример? Гуглил по-русски - не нашел ничего. А на англоязычных искать не получается. Если кто готов поделиться своими разработками (хотя бы в личку), то я буду очень признателен. Хочется просто увидеть, как это делается у грамотных людей. Хотя бы какие-то базовые вещи.
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Как задавать свойства предметов и передавать их персонажу?

Сообщение Agiliter » 17 сен 2014, 10:52

Впрочем,
6. как инициализировать предмет по конкретному itemID? Откуда грузить? Хранить в БД таблицу всех предметов? Как хранить характеристики предметов?
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Re: Как задавать свойства предметов и передавать их персонажу?

Сообщение sasha^ » 17 сен 2014, 15:48

1. Не нужно.. занеси все х-ки предмета в одну переменную Item.
2. Да не.. подгружай из файла или из массива или с сервера в виде JSON например...
3. Нет. все в одну переменную...
4. Чтобы у персонажа изменять х-ки.. то после каждого перетаскивая например запускать ф-цию которая к стартовым х-кам приплюсует все х-ки предметов надетых.
5. такого не делал)))
6. ну на сервере сохрани в виде JSON и все.. отдавай как файл.. в бд не нужно - нагрузка будет большая....


Ну в общем ты понял... все в 1 переменную.. потом с сервера грузить JSON-ом... потом когда нужно плюсовать - просто проходимся по свойствам и через switch, или через foreach и по именам динамический доступ... ( например: obj[name_of_variable] - где name_of_variable стока или переменная стокового типа)

За это сообщение автора sasha^ поблагодарил:
Agiliter
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: Как задавать свойства предметов и передавать их персонажу?

Сообщение XELAD » 17 сен 2014, 15:49

Я бы сделал xml подгружаемый с характеристиками, вы же магазин будете потом делать. В противном случае придётся из базы загружать всю таблицу с 4+ тысячами Items. Впрочем, и из базы можно загрузить в виде xml. Xml упростит поиск по itemID.
  1. <?xml version="1.0" encoding="UTF-8"?><items>
  2. <item ID=123 hp=100 crit=25 />
  3. <item ID=124 armor=50 attack=50 />
  4. <item ID=125 hp=75 armor=75 />
  5. </items>

Я бы советовал выделить характеристики в отдельный класс, к примеру ItemParams.
В классе ItemParams добавите vars для каждой характеристики, изначально приравнивая к нулю:
  1. public var hp:Number = 0;
  2. public var armor:Number = 0;
  3. public var crit:uint = 0;

После загрузки xml создадите инвентарь, каждая Item которого с помощью функции найдёт в xml себя и подправит свои характеристики. Пример:
  1. var some_item:Item = ссылка;
  2. var item_params:XMLList = LOADED_XML.items.(@ID == some_item.itemID);
  3. for(var i in item_params)
  4. {
  5. if(some_item.hasOwnProperty(i))
  6. {
  7. some_item[i] = item_params[i];
  8. }
  9. }

Касательно героя - прикручиваете ему ItemParams, ставите hp к примеру 100. Затем создаёте итоговую ItemParams, проходите циклом по всему надетому и игроку, всё суммируете, записываете в итог. Получаете итоговую ItemParams с учётом х-к вещей и самого героя.
За работоспособность примеров не ручаюсь.

За это сообщение автора XELAD поблагодарил:
Agiliter
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в Программирование на Flash



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron