快速业务通道

设计自己的3D图像引擎(3):WuguiEngine之基础循环的实现

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

1. 实现一个可重用的Windows Class(WEWindow)

下面的内容可能需要你知道一点简单的Windows程序编写的知识, 如果发现看不太懂, 也不用找很多的资料, 只要看看DirectX SDK中附带的Direct3D Turtorial就行了.

窗体的建立主要是有如下的难点:

1) 消息循环中的On Idle的处理函数不太好放.

2) WinMain函数入口处的HInstance需要保存

3) 窗体建立之后的HWND也是需要保存的

为了方便起见,我使用了单件模式作为设计,如果大家有更好的想法,也欢迎讨论

WEWindow类的声明看起来有点像这个样子:

1: /* IRenderable.h : 处理初始化窗体的类,使用单件模式
2:   Programer   : Tan Wangda(LeftNotEasy)
3:   Email     :  Wheeleast@gmail.com
4:   Created Time : 2009 - 8 - 10          */
5:
6: #ifndef _WEWINDOW_H
7: #define _WEWINDOW_H
8:
9: # include "WuguiEngine.h"
10:
11: namespace WuguiEngine
12: {
13:   //这是一个Singleton
14:   class WEWindow
15:   {
16:   public:
17:     //得到窗体类的实例
18:     static WEWindow* GetInstance();
19:
20:     //设置HInstance
21:     void SetHInstance(HINSTANCE hInst);
22:     //获取HInstance
23:     HINSTANCE GetHInstance();
24:
25:     //设置窗体
26:     void SetWEWindow(LPCWSTR szTitle, //窗体标题
27:       int iWidth,            //宽度
28:       int iHeight,          //高度
29:       DWORD iStyle);         //样式
30:
31:     void CreateMainWindow();
32:
33:     int GetWidth();
34:     int GetHeight();
35:
36:     //获取窗体句柄
37:     HWND GetHWnd();
38:   protected:
39:     HINSTANCE hInst;
40:     HWND hWnd;
41:
42:     //窗体标题
43:     LPCWSTR szTitle;
44:
45:     //宽度
46:     int iWidth;
47:
48:     //高度
49:     int iHeight;
50:
51:     //样式
52:     DWORD iStyle;
53:
54:     //创建窗体
55:     void CreateWEWindow(LPCWSTR szTitle, //窗体标题
56:       int iWidth,             //宽度
57:       int iHeight,           //高度
58:       DWORD iStyle);          //样式
59:
60:     //进入消息循环
61:     void EnterMessageLoop();
62:   private:
63:     static WEWindow* weInstance;
64:     WEWindow();
65:   };
66: }
67:
68: #endif 

代码的命名基本上也能够看出意义, 另外再给一段使用WEWindow的函数,位于Program.cpp里面

1: INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int)
2: {
3:   //第一步,设置窗体
4:   WEWindow* weWindow = WEWindow::GetInstance();
5:   weWindow->SetHInstance(hInstance);
6:   weWindow->SetWEWindow(L"Hello World", 640, 480, WS_OVERLAPPEDWINDOW | WS_VISIBLE);
7:   weWindow->CreateMainWindow();

首先代码获取处WEWindow类的实例,然后设置参数,最后调用CreateMainWindow就完成了操作了

2. 完成一个基础的游戏类(BaseGame)

还是先给出头文件的声明:

1: class BaseGame : virtual public IDisposed, virtual public IRenderable, virtual public IUpd

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号