Я новичок, как в игре developping и программирования.
Я пытаюсь узнать некоторые принципы в построении игрового движка.
Я хочу , чтобы создать простую игру, я в точке , где я пытаюсь реализовать игровой движок.
Так я думал, что мой движок игры должен контролировать это вещи:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
Я разработал свои объекты, как это:
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
}
и у меня есть 4 различных объектов в моей игре: самолет, препятствие, игрок, пуля и я проектировал их, как это:
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
Теперь в игровом движке я хочу иметь общий список объектов, где можно проверить, например, для столкновения, объектов двигаются, и так далее, но я хочу также, что движок игры будет принимать пользовательские команды для управления проигрывателем ...
Это хорошая идея?
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
}
конструктор GameEngine будет выглядеть так:
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
Тот факт, что я использую указатель, заключается в том, что мне нужно вызвать fire()
объект, который уникален для объекта Player.
Итак, мой вопрос: это хорошая идея? Правильно ли мое использование наследования здесь?