本文共 1307 字,大约阅读时间需要 4 分钟。
学习游戏编程的人都需要首先建立游戏的主框架,然后才是各种技术的运用。下面是一种PC游戏设计的思路。
这种架构是建立在状态转换基础上的。我们知道PC游戏经常可以分成许多状态,如:开始动画、主菜单、各个分菜单、游戏、游戏数据统计显示等状态。这样做的好处在于可以分别处理键输入并方便状态切换处理。
下面以C++ 为编程语言来实现:
首先设计一个基类(CState)来实现一些基本的状态功能,这是因为我们就是基于状态来架构游戏的。
CState
{ public: CState(){} ~CState(){}void Initial(); //进入此状态时的初始化操作
void CleanUp(); //退出此状态时的清理操作 void Pause(); //此状态暂停时操作 void Resume(); //重启此状态时的操作 void HandleEvents(); //处理输入和其它事件 void UpdateWorld(); //更新游戏世界数据 void DrawScene(); //绘制场景};建立了基类后以后所有的游戏状态都可以通过继承CState来得到。
其次设计一个状态管理类(CStateManage)来实现状态的转换和管理,其实可以理解为就是游戏本身。下面是一种设计:
#include <vector>
#include "state.h" //上面类的声明文件CStateManage{ public: CStateManage(){} ~CStateManage(){} void Initial() { m_Runing=true; }; void CleanUp() {}; void ChangeState(CState * state); void PushState(CState * state); void PopState(CState * state); void HandleEvents(); //处理输入和其它事件 void UpdateWorld(); //更新游戏世界数据 void DrawScene(); //绘制场景 void Run() { while(m_Runing) { HandleEvents(); UpdateWorld(); DrawScene(); } }; //进入游戏执行private: bool m_Runing; //游戏是否继续执行 std::vector<CState *> m_States;};最后将这些结合到主函数中例如:
#include "statemanage.h"void main (int argc, char * argv[]){ CStateManage game; game.Initial(); game.ChangeState( CIntroState::Instance() ); game.Run(); game.CleanUp();}这样就建立起一个基于状态转化的游戏架构。
参考:
Managing Game States in C++()或者中文翻译的()转载地址:http://mhwqb.baihongyu.com/