Jestem początkującym zarówno w tworzeniu gier, jak i programowaniu.
Próbuję nauczyć się jakiejś zasady budowania silnika gry.
Chcę stworzyć prostą grę, jestem w punkcie, w którym próbuję wdrożyć silnik gry.
Pomyślałem więc, że mój silnik gry powinien kontrolować te rzeczy:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
Moje obiekty zaprojektowałem w ten sposób:
class GlObject{
private:
idEnum ObjId;
//other identifiers
public:
void move_obj(); //the movements are the same for all the objects (nextpos = pos + vel)
void rotate_obj(); //rotations are the same for every objects too
virtual Polygon generate_mesh() = 0; // the polygons are different
}
i mam 4 różne przedmioty w mojej grze: samolot, przeszkoda, gracz, kula i zaprojektowałem je w następujący sposób:
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
Teraz w silniku gry chcę mieć ogólną listę obiektów, na której mogę sprawdzać na przykład kolizję, przenosić obiekty itd., Ale chcę również, aby silnik gry przyjmował polecenia użytkownika do sterowania odtwarzaczem ...
Czy to dobry pomysł?
class GameEngine{
private:
std::vector<GlObject*> objects; //an array containg all the object present
Player* hPlayer; //hPlayer is to be read as human player, and is a pointer to hold the reference to an object inside the array
public:
GameEngine();
//other stuff
}
Konstruktor GameEngine będzie taki:
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
Używam wskaźnika, ponieważ muszę wywołać ten, fire()
który jest unikalny dla obiektu Player.
Więc moje pytanie brzmi: czy to dobry pomysł? Czy moje użycie dziedziczenia jest tutaj nieprawidłowe?