Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Где хранить метаданные

Где хранить метаданные

harkbackПостоялецwww13 июня 201820:41#0
Привет. Столкнулся с весьма неожиданной для меня проблемой - не пойму где и как хранить данные для игровых объектов.

Суть проста: у меня более 10 классов разнообразных игровых юнитов. У каждого свои данные здоровья, брони, урона и тд. В какой то момент мне стало необходимо узнать максимальное здоровье у 'солдата'. Залазить в массив игровых объектов - дуратская идея (и его там может и не быть). Создавать экземпляр класса 'солдата' - тоже весьма странная.

Теперь вот думаю где и как хранить нужные мне данные. В самом классе 'солдата' в виде констант, или отдельный специальный класс данных? Что можете посоветовать?

mr.DIMASПостоялецwww13 июня 201822:10#1
harkback
Обычно в таких случаях делают класс UnitDefinition в котором идет описание общих свойств для всевозможных типов юнитов. Далее можно завести map<UnitType, UnitDefinition> и получать нужный definition по типу юнита. Более того, указатель на definition можно хранить в юните, чтобы не дергать map каждый раз.

Простой пример кода:

struct UnitDefinition {
  int maxHealth; // общие значения для всех юнитов какого-либо типа
  int maxArmor;
};

map<UnitType, UnitDefinition> definitions;

...

struct Unit {
  UnitDefinition* definition;
  int health; // уникальные значения для каждого юнита
  int armor; 
};

Такой подход позволяет хранить definition'ы в файле.

Правка: 13 июня 2018 22:12

harkbackПостоялецwww14 июня 201813:47#2
mr.DIMAS
Звучит интересно. Возможно, так и сделаю. спс)
tacПостоялецwww18 июня 201817:37#3
harkback
> В самом классе 'солдата' в виде констант
именно так, но в виде обычных свойств

а сами значения берутся из БД

/ Форум / Программирование игр / Игровая логика и ИИ

2001—2018 © GameDev.ru — Разработка игр