Я початківець і в розробці ігор, і в програмуванні.
Я намагаюся навчитися деякому принципу в побудові ігрового двигуна.
Я хочу створити просту гру, я зараз в тій точці, коли я намагаюся реалізувати ігровий движок.
Тому я подумав, що мій ігровий движок повинен контролювати це:
- 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.
Тож моє запитання: чи це гарна ідея? Чи моє використання спадщини тут неправильне?