我正在开发游戏,现在我已经遵循了GameState Manager教程,但是我不确定为什么代码不能正常工作。可能是因为它是本教程中较旧的c ++版本,但我似乎找不到解决方法。
#pragma once
#include "GameEngine.h"
class GameState
{
public:
virtual void Init() = 0;
virtual void Cleanup() = 0;
virtual void SplashScreen() = 0;
virtual void Pause() = 0;
virtual void Resume() = 0;
virtual void HandleEvents(GameEngine *game) = 0;
virtual void Update(GameEngine *game) = 0;
virtual void Draw(GameEngine *game) = 0;
void ChageState(GameEngine* game,
GameState* state) {
game->ChangeState(state);
}
protected: GameState() {}
};
如果我不玩GameEgine *游戏和GameState * state并删除使用它们的每一行,我的程序都可以正常工作,我的窗口会出现,但我不能更改游戏状态,这确实很重要。 如果没有人有答案,那就可以了:)
编辑:我忘了显示GameEngine.h文件
#pragma once
#include "GameState.h"
#include "include.h"
class GameEngine
{
public:
Recources recource;
void Init(std::string name, int x, int y);
void Cleanup();
void SplashScreen();
void ChangeState(GameState* state);
void PushState(GameState* state);
void PopState();
void HandleEvents();
void Update();
void Draw(sf::RenderWindow &widnow);
bool Running() { return m_running; }
void Quit() { m_running = false; }
private:
// the stack of states
std::vector<GameState*> states;
bool m_running;
};
答案 0 :(得分:0)
ChangeState中的变量游戏(传递给函数)必须是对象GameEngine(其函数具有ChangeState,与GameState的ChangeState不同),因此您可以调用game-> ChangeState,因此如果您使用的GameEngine对象具有必要的功能,并且您传递正确的参数,一切都会好的。