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

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.
Ответить
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

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

Сообщение Agiliter »

Добрый день! Продолжаю работу над созданием инвентаря к игре. Реализовал базовый инвентарь, который состоит из слотов, в которые помещаются базовые предметы. Реализовал удаление, добавление, замену, drag-and-drop и пр.
Я реализовал класс инвентаря-сумки и инвентаря-надетых вещей. Между ними реализованы все операции. Теперь думаю над тем, как наделить каждый предмет так сказать индивидуальностью.
Есть базовый класс Item. Каждый предмет имеет свойства

Код: Выделить всё

private var itemID:uint;//ID в некой таблице предметовprivate var price:uint;//ценаprivate var description:String = "Обычный предмет";//Описание     private var typeItem:String;//Тип предмета, например, = "armor"private var imageName:String;//Путь к изображению для иконки предмета
При создании экземпляра класса задается только itemID

Код: Выделить всё

public function Item(_itemID:uint) {    itemID = _itemID;    init();}
В init() каким-то образом по itemID должны задаваться остальные свойства. Наверное, из какого-нибудь внешнего файла или БД подгружать нужно. Я пока делаю тупо в классе, причем не заморачиваюсь и делаю ни для каждого itemID, а для диапазона

Код: Выделить всё

if (itemID >= 0 && itemID < 1999){    typeItem = "Armor";    imageName = "armor.jpg";    price = 100;    description = "Хорошая броня. Стоимость: " + String(price) + ". Вес: " + weight;}    else if (itemID >= 2000 && itemID < 3999)    {        typeItem = "Gun";        ...    }    else if ...
это временно. Потом буду думать как инициализировать по конкретному itemID.
Более важный для меня вопрос состоит в том, как предмет должен передавать свои свойства игровому персонажу при надевании.

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

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

Сообщение Agiliter »

Впрочем,
6. как инициализировать предмет по конкретному itemID? Откуда грузить? Хранить в БД таблицу всех предметов? Как хранить характеристики предметов?
sasha^
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52

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

Сообщение sasha^ »

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


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

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

Сообщение XELAD »

Я бы сделал xml подгружаемый с характеристиками, вы же магазин будете потом делать. В противном случае придётся из базы загружать всю таблицу с 4+ тысячами Items. Впрочем, и из базы можно загрузить в виде xml. Xml упростит поиск по itemID.

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?><items><item ID=123 hp=100 crit=25 /> <item ID=124 armor=50 attack=50 /><item ID=125 hp=75 armor=75 /></items>
Я бы советовал выделить характеристики в отдельный класс, к примеру ItemParams.
В классе ItemParams добавите vars для каждой характеристики, изначально приравнивая к нулю:

Код: Выделить всё

public var hp:Number = 0;public var armor:Number = 0;public var crit:uint = 0;
После загрузки xml создадите инвентарь, каждая Item которого с помощью функции найдёт в xml себя и подправит свои характеристики. Пример:

Код: Выделить всё

var some_item:Item = ссылка;var item_params:XMLList = LOADED_XML.items.(@ID == some_item.itemID);for(var i in item_params){if(some_item.hasOwnProperty(i)){some_item[i] = item_params[i];}}
Касательно героя - прикручиваете ему ItemParams, ставите hp к примеру 100. Затем создаёте итоговую ItemParams, проходите циклом по всему надетому и игроку, всё суммируете, записываете в итог. Получаете итоговую ItemParams с учётом х-к вещей и самого героя.
За работоспособность примеров не ручаюсь.
Ответить