Parece que no puedo encontrar una buena explicación del diseño orientado a datos para un juego de zombis genérico (es solo un ejemplo, un ejemplo bastante común).
¿Podría dar un ejemplo del diseño orientado a datos sobre la creación de una clase genérica de zombies? ¿Es bueno lo siguiente?
Lista de zombis clase:
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
}
Ejemplo:
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
}
O crearía un contenedor World genérico que contenga todas las acciones de bite(zombieId, playerId)
to moveTo(playerId, vector)
a createPlayer()
to shoot(playerId, vector)
to face(radians)/face(vector)
; y contiene:
std::vector<zombie>
std::vector<player>
...
std::vector<mapchunk>
...
std::vector<vbobufferid> player_run_animation;
...
ser un buen ejemplo?
¿Cuál es la forma correcta de organizar un juego con DOD?
fuente
También he estado buscando un buen ejemplo de esto, pero con recursos limitados en la red y nadie que me diga cómo hacerlo correctamente, lo hice con la siguiente implementación. (Puede que no sea el mejor, pero sigue la idea básica)
Entonces, la implementación es más o menos así: tiene una clase de objeto base, que contiene todos los datos comunes. Cuando se construye su clase de automóvil, usted especifica qué cantidad de datos desea agrupar y, por lo tanto, tiene suficiente memoria para todos los objetos.
desde allí puede agregar identificadores o lo que sea necesario para su implementación. pero intenté esto en un juego más simple, y funcionó bastante bien.
Tampoco está tan lejos de su diseño, y, francamente, no conozco una manera más eficiente de hacer esto.
fuente