5

因此,我一直在尝试遵循大学引擎开发任务的空白指南,但我无法弄清楚如何使用我GameStateManager来访问和更新堆栈顶部的状态,也称为TopState在我的代码中。

这很简单,我初始化并运行引擎main并设置并推送第一个状态:

void main()
{
    EApplication::Init();

    EApplication* pApp = new EApplication();

    pApp->GetGameStateManager()->SetState("TEST", new ETestState(pApp));

    pApp->GetGameStateManager()->PushState("TEST");

    pApp->GetGameStateManager()->UpdateGameStates(ETime::deltaTime);

    EApplication::RunApp();
    delete pApp;
}

但是,正如您在下面看到的那样UpdateGameStates,my 中的函数GameStateManager尚未执行任何操作,因为我不确定如何访问或指向当前状态,从而调用它自己的相应Update函数:

游戏状态管理器

#include "AppGSM\EGamestateManager.h"

EGameStateManager::EGameStateManager(){ topState = new char[8]; }

EGameStateManager::~EGameStateManager(){}

void EGameStateManager::SetState(const char *szName, EBaseGameState *state){}

void EGameStateManager::PushState(const char *szName){}

void EGameStateManager::PopState(){}

void EGameStateManager::ChangeState(const char *szName){}

const char* EGameStateManager::GetTopStateName()
{ 
    return topState; 
}

EBaseGameState* EGameStateManager::GetTopState()
{  

}

void EGameStateManager::UpdateGameStates(float deltaTime)
{


}

void EGameStateManager::DrawGameStates(){}

我只是想知道当我尝试使用时应该指向什么GetTopState(),以及如何访问该状态的更新功能?

4

1 回答 1

1

你想如何存储你的状态?使用“PushState”和“TopState”等,我假设您的讲师希望您实现自己的 EBaseGameState* ponters 堆栈。

现在有很多假设。我假设 EBaseGameState 只是一个抽象数据类型,您必须实现从该状态继承的所有不同状态。因此,访问该状态的更新功能的一种简单方法是具有以下内容:

class EBaseGameState
{
   public:
     //other functions omitted
     virtual void Update(float deltaTime) = 0;

};

class MenuState : EBaseGameState
{
   public:
     //other functions and implementation of Update() omitted
     void Update(float deltaTime);
}

然后在调用代码中它会很简单

void EGameStateManager::UpdateGameStates(float deltaTime)
{
    topStatePointer->Update(deltaTime);
}

实现堆栈的一个好方法是使用 Vector 并在它的后面添加 newstates 并在需要时从它的后面弹出状态,但是为什么要存储状态的名称超出了我的理解。你的导师要你核对名字吗?我会问他/她一些澄清

于 2013-10-28T02:37:04.807 回答