设计自己的3D图像引擎(3):WuguiEngine之基础循环的实现
atable 2: { 3: public: 4: BaseGame(string name); //Constructor 5: GraphicsDevice* GetGraphicsDevice(); //获取GraphicsDevice 6: void Tick(); //一帧完整的游戏 7: virtual void Run() = 0; //开始一场游戏,里面建立消息循环 8: virtual void Dispose(); 9: virtual void Update(DWORD dt); 10: virtual void Render(DWORD dt); 11: virtual void Initialize(); 12: void RegisterCamera(BaseCamera* camera); 13: BaseCamera* GetCamera(); 14: protected: 15: //方法: 16: void SetTimeUsed(); //设置花费的时间 17: void ShowFPS(); 18: void UpdateCamera(DWORD dt); 19: 20: //变量: 21: GraphicsDevice* pDevice; //指向GraphicsDevice的指针 22: bool isInitialized; //是否初始化 23: BaseCamera* pCamera; 24: }; 其中, IDisposed,IRenderable, IUpdatable等I开头的类是接口类,里面具有纯虚函数,重写就可以实现具体的代码了. GraphicsDevice类是我准备将Direct3D中的IDirect3DDevice9类封装得到,使得使用起来更方便,而且增加一些实用的功能,不过目前的功能和本来的Device功能差不多,这里就不多说了. 另外值得注意的是Tick函数,其描述的是一帧游戏的过程:
Update和Render都是虚函数, 当我们将一个类继承自BaseGame的时候, 也就会调用相应的Update和Render类. 代码中的TimeUsed是静态类,里面存储了时间相关的参数,比如一帧时间的长度, 从启动游戏到现在的时间长度等等. 其他的函数都有注释, 如果还有不太理解的地方,也可以从GoogleCode上面把源代码下下来,很快就会明白了 3. 下面举一个基本的例子,来说明这些程序是怎样一步步进行的 主要的类: TestGame(继承自BaseGame), WEWindow, BaseGame. 1) 在WinMain()中,首先完成建立窗体:
2)在WinMain()中,创建一个TestGame类的实例,并且调用TestGame->Run(继承自BaseGame的纯虚函数)
3)在TestGame->Run()中, 进行初始化与建立消息循环的操作
4)在TestGame::Initialize()中,完成一些初始化的工作, 为进 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |