Je n'arrive pas à trouver une belle explication de la conception orientée données pour un jeu de zombie générique (ce n'est qu'un exemple, un exemple assez courant).
Pourriez-vous faire un exemple de la conception orientée données sur la création d'une classe zombie générique? Est-ce que ce qui suit est bon?
Classe de liste de zombies:
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
}
Exemple:
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
}
Ou serait la création d' un conteneur du monde générique qui contient toutes les actions de bite(zombieId, playerId)
la moveTo(playerId, vector)
à createPlayer()
la shoot(playerId, vector)
à face(radians)/face(vector)
; et contient:
std::vector<zombie>
std::vector<player>
...
std::vector<mapchunk>
...
std::vector<vbobufferid> player_run_animation;
...
être un bon exemple?
Quelle est la bonne façon d'organiser un jeu avec DOD?
la source
Je cherchais également un bon exemple de cela, mais avec des ressources limitées sur le net et personne pour me dire comment le faire correctement, je l'ai fait avec l'implémentation suivante. (ce n'est peut-être pas le meilleur, mais cela suit l'idée de base)
Donc l'implémentation est plus ou moins comme ceci: vous avez une classe d'objets de base, qui contient toutes les données communes. Lorsque votre classe de voiture est construite, vous spécifiez la quantité de données que vous souhaitez mettre en commun et disposez donc de suffisamment de mémoire pour tous les objets.
à partir de là, vous pouvez ajouter des identifiants ou tout ce qui vous semble nécessaire pour votre implémentation. mais j'ai essayé cela sur un jeu plus simple, et cela a fonctionné assez bien.
Ce n'est pas loin de votre conception non plus, et franchement, je ne connais pas de moyen plus efficace de le faire.
la source