Я занимаюсь дизайном игр и решил, что мне нужна модель, ориентированная на данные ... один объект "игровых данных", который передается из подсистемы в подсистему и сам знает, как его следует рисовать, как должна работать физикасам, как входные данные от пользователя будут влиять на это и т. д.
Итак, я начал с объектов прослушивания "Listener", таких как "BaseRenderer", "BaseInputHandler" и т. д .:
class BaseRenderer
{
public:
virtual void Render(BITMAP *b) = 0;
};
class BaseInputHandler
{
public:
virtual int TakeInputs() = 0;
};
И создал "GameData "объект, который наследуется от этих ...
class GameData : public BaseRenderer, public BaseInputHandler, public BaseCalculator
{
public:
/* Virtual Overwrites: (each child of GameData will need to overwrite these!)
void Render(BITMAP *b);
int TakeInputs();
void Calculate();*/
};
И тогда каждая подсистема имеет синглтон, который будет выполнять различные операции (рендеринг, получение входных данных и т. Д.) Над игровыми данными ...
GameData gd; // Or inherited from GameData...
Input::System().Init();
...
while(loop) {
loop &= !(Input::System().GetInputs(&gd));
...
}
Это правильный и разумный способ наследования?Причина, по которой я спрашиваю, заключается в том, что я получаю неясные сбои во время выполнения ... Не выделяю никакой динамической памяти.Вчера вечером у меня произошел сбой при добавлении двух функций-членов в GameData (виртуальных или не виртуальных), а затем они исчезли, когда я добавил их медленно (сначала 1 не виртуальный, затем 1 виртуальный, затем 2 не виртуальный и т. Д.).
Я читал что-то на SO (не помню, где это было сейчас) о наследовании и срезах.Я на самом деле не понял, но я делаю что-то опасное с моим наследованием, которое вызывает периодически возникающие ошибки во время выполнения?
Или я должен посмотреть на мой временной код, использующий QueryPerformanceCounter?
MinGW+ аллегро