Ich kann anscheinend keine gute Erklärung für das datenorientierte Design eines generischen Zombiespiels finden (es ist nur ein Beispiel, ein ziemlich häufiges Beispiel).
Könnten Sie ein Beispiel für das datenorientierte Design zum Erstellen einer generischen Zombie-Klasse geben? Ist das folgende gut?
Zombielistenklasse:
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
}
Beispiel:
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
}
Oder würde die Schaffung eines generischen Welt Container, der jede Aktion von enthält bite(zombieId, playerId)
bis moveTo(playerId, vector)
zu createPlayer()
bis shoot(playerId, vector)
zu face(radians)/face(vector)
; und enthält:
std::vector<zombie>
std::vector<player>
...
std::vector<mapchunk>
...
std::vector<vbobufferid> player_run_animation;
...
ein gutes Beispiel sein?
Was ist der richtige Weg, um ein Spiel mit DOD zu organisieren?
quelle
Ich habe auch nach einem guten Beispiel dafür gesucht, aber mit begrenzten Ressourcen im Internet und niemandem, der mir sagt, wie man es richtig macht, habe ich es mit der folgenden Implementierung gemacht. (Es ist vielleicht nicht das Beste, aber es folgt der Grundidee)
Die Implementierung sieht also mehr oder weniger so aus: Sie haben eine Basisobjektklasse, die alle gängigen Daten enthält. Wenn Ihre Fahrzeugklasse erstellt wird, geben Sie an, welche Datenmenge Sie zusammenfassen möchten, und verfügen daher über genügend Speicher für alle Objekte.
Von dort aus können Sie natürlich Kennungen hinzufügen oder alles, was für Ihre Implementierung erforderlich ist. Aber ich habe es mit einem einfacheren Spiel versucht, und es hat ziemlich gut funktioniert.
Es ist auch nicht so weit von Ihrem Design entfernt, und ehrlich gesagt kenne ich keinen effizienteren Weg, dies zu tun.
quelle