-2

我是 C++ 新手,作为一名大学项目,我们正在构建一个 2D 平台游戏,我最近读到拥有一堆游戏状态而不是一个带有游戏状态的全局变量是个好主意(这就是我现在所拥有的)但我不知道该怎么做。

目前这是我的实现:

class GameState
{
    public:
        virtual ~GameState(){};
        virtual void handle_events() = 0;
        virtual void logic() = 0;
        virtual void render() = 0;
};

class Menu : public GameState
{
    public:
        Menu();
        ~Menu();
        void handle_events();
        void logic();
        void render();
};

然后我有一个 GameState 类型的全局变量:

游戏状态 *currentState = NULL;

在我的 Main 我定义 currentState 并调用它的方法:

int main(){
    currentState = new Menu();
    currentState.handle_events();
}

我怎样才能实现一个堆栈或类似的东西从那个到这样的东西:

int main(){
    statesStack.push(new Menu());
    statesStack.getTop().handle_events();
}
4

2 回答 2

2

嗯,这并不是说你不能实现

std::stack<GameState *>

并且仍然编写一个不会泄漏的程序 - 它只是让您有责任进行内存管理。

如果你想让生活更轻松,你可以实现一个 shared_ptr 堆栈(使用引用计数的智能指针来跟踪对象的生命周期,并在不再需要对象时自动调用析构函数)。

std::stack<shared_ptr<GameState>> mystack;

mystack.push_back(shared_ptr<GameState>(new GameState()));
于 2013-10-08T16:09:35.880 回答
0

使用std::stack<GameState *>.

于 2013-10-08T15:48:07.363 回答