我是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类型的全局变量:
GameState * currentState = NULL;
在我的Main中我定义了currentState并调用它的方法:
int main(){
currentState = new Menu();
currentState.handle_events();
}
我如何实现堆栈或类似的东西,从而实现类似的东西:
int main(){
statesStack.push(new Menu());
statesStack.getTop().handle_events();
}
答案 0 :(得分:2)
嗯,这并不是说你无法实施
std::stack<GameState *>
并且仍然编写一个不泄漏的程序 - 它只是让你负责进行内存管理。
如果你想让生活更轻松,你可以实现一堆shared_ptr(使用引用计数智能指针来跟踪对象的生命周期,并在不再需要对象时自动调用析构函数。)
std::stack<shared_ptr<GameState>> mystack;
mystack.push_back(shared_ptr<GameState>(new GameState()));
答案 1 :(得分:0)
使用std::stack<GameState *>
。