Saya sepertinya tidak bisa menemukan penjelasan yang bagus tentang Desain Berorientasi Data untuk permainan zombie generik (itu hanya contoh, contoh yang cukup umum).
Bisakah Anda membuat contoh Desain Berorientasi Data pada pembuatan kelas zombie generik? Apakah yang berikut ini baik?
Kelas daftar zombie:
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
}
Contoh:
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
}
Atau akan menciptakan wadah Dunia generik yang berisi setiap tindakan dari bite(zombieId, playerId)
ke moveTo(playerId, vector)
ke createPlayer()
ke shoot(playerId, vector)
ke face(radians)/face(vector)
; dan mengandung:
std::vector<zombie>
std::vector<player>
...
std::vector<mapchunk>
...
std::vector<vbobufferid> player_run_animation;
...
menjadi contoh yang baik?
Apa cara yang tepat untuk mengatur gim dengan DOD?
sumber
Saya telah mencari contoh yang baik dari ini juga, tetapi dengan sumber daya terbatas di internet dan tidak ada yang memberi tahu saya bagaimana melakukannya dengan benar, saya melakukannya dengan implementasi berikut. (mungkin bukan yang terbaik, tetapi mengikuti ide dasar)
Jadi implementasinya kurang lebih seperti ini: Anda memiliki kelas objek dasar, yang menampung semua data umum. Ketika kelas mobil Anda dibangun, Anda menentukan jumlah data yang Anda ingin mengumpulkan, dan karenanya memiliki memori yang cukup untuk semua objek.
dari sana Anda dapat menambahkan pengidentifikasi atau apa pun yang diperlukan untuk implementasi Anda di luar kantor. tetapi saya mencoba ini pada permainan yang lebih sederhana, dan itu berhasil dengan cukup rapi.
Itu tidak jauh dari desain Anda, dan terus terang saya tidak tahu cara yang lebih efisien untuk melakukan ini.
sumber