Кажется, я не могу найти хорошее объяснение Data Oriented Design для обычной игры зомби (это всего лишь пример, довольно распространенный пример).
Не могли бы вы привести пример Data Oriented Design для создания универсального класса зомби? Это хорошо?
Класс списка зомби:
class ZombieList {
GLuint vbo; // generic zombie vertex model
std::vector<color>; // object default color
std::vector<texture>; // objects textures
std::vector<vector3D>; // objects positions
public:
unsigned int create(); // return object id
void move(unsigned int objId, vector3D offset);
void rotate(unsigned int objId, float angle);
void setColor(unsigned int objId, color c);
void setPosition(unsigned int objId, color c);
void setTexture(unsigned int, unsigned int);
...
void update(Player*); // move towards player, attack if near
}
Пример:
Player p;
Zombielist zl;
unsigned int first = zl.create();
zl.setPosition(first, vector3D(50, 50));
zl.setTexture(first, texture("zombie1.png"));
...
while (running) { // main loop
...
zl.update(&p);
zl.draw(); // draw every zombie
}
Или создать общий Всемирный контейнер , который содержит все действия от bite(zombieId, playerId)
до moveTo(playerId, vector)
до createPlayer()
до shoot(playerId, vector)
до face(radians)/face(vector)
; и содержит:
std::vector<zombie>
std::vector<player>
...
std::vector<mapchunk>
...
std::vector<vbobufferid> player_run_animation;
...
быть хорошим примером?
Как правильно организовать игру с DOD?
источник
Я искал хороший пример этого, но с ограниченными ресурсами в сети, и никто не сказал мне, как это сделать правильно, я сделал это со следующей реализацией. (это может быть не самым лучшим, но оно следует основной идее)
Таким образом, реализация более или менее похожа на это: у вас есть базовый объектный класс, который содержит все общие данные. Когда ваш автомобильный класс создается, вы указываете, какой объем данных вы хотите объединить, и поэтому у вас будет достаточно памяти для всех объектов.
оттуда вы можете добавить идентификаторы или что-то, что когда-либо кажется необходимым для вашей реализации. но я попробовал это на более простой игре, и она работала довольно аккуратно.
Это не так далеко от вашего дизайна, и, честно говоря, я не знаю более эффективного способа сделать это.
источник