游戏编程基础
1-概论
1.游戏的组成
游戏由剧情、图形图像、声音、文本等资源组成。
2.游戏设计与制作
设计与制作过程大致分为策划,美工,音效,程序,测试五部分。
策划:负责设计游戏的剧情、类别、玩法等,是游戏最重要的部分,直接决定了游戏的成功与否。
美工:负责绘制游戏中所需图形图像资源。
音效:负责制作游戏中所需的声音资源。
程序:负责将多媒体资源按照策划规定的方式组合起来,制作成最终产品-游戏。
测试:负责测试程序的稳定性、游戏的难度等。
我之前看过一本书,书中有这么一个比喻:如果拿游戏与人来类比的话,策划就是心脏,程序是骨骼,美工是皮肤,音效是衣服。
游戏编程,就是游戏设计与制作的程序部分。在我的整个笔记中,所探讨的核心内容,就是游戏的程序实现。
2-游戏程序组成
1.组成
主要由逻辑更新和画面渲染两部分组成,也可以说游戏程序就只干这两件事情。
逻辑更新:接收玩家的输入,更新敌人、玩家、世界等数据。
画面渲染:将游戏内容以图像的方式呈现出来。
2.程序流程 
初始化数据-更新-渲染-释放资源。
3-Windows程序设计基础
        我所使用到的技术都是基于windows操作系统的,在2D游戏编程方面,使用GDI(图
像开发接口)来处理图形图像,虽然GDI的执行效率较低,但是相对于其他的开发包来说,它比较容易学习和理解,在我们学习阶段使用它没问题。当我们对游戏编程思想有了更深的了解的时候,可以使用其他开发包来处理图形图像,如DirectX 3DOpenGL等。
1.程序入口WinMain
一个简单的windows程序。
[cpp] view plaincopy
1. #include <Windows.h> 
2. int WINAPI WinMain(HINSTANCE hInstance, 
3.                    HINSTANCE hPrevInstance,   
4.                    LPSTR lpCmdLine, 
5.                    int nShowCmd ) 
6.
7.     MessageBox(NULL, 
8.         L"这是一个简单的windows应用程序!"
9.         L"这是标题"
10.         MB_OKCANCEL|MB_ICONINFORMATION); 
11.     return 0; 
12.


WinMainC语言的main函数类似,都是程序的入口函数,由系统调用。
[cpp] view plaincopy
1. int WINAPI WinMain( 
2.   HINSTANCE hInstance,     // handle to current instance 
3.   HINSTANCE hPrevInstance, // handle to previous instance 
4.   LPSTR lpCmdLine,         // command line 
5.   int nCmdShow              // show state 
6. ); 


详细参数可以参看MSDN或去百科上看,写程序时,保持这个结构不变即可。最重要的参数是hInstance,为应用程序实例句柄,标识了当前应用程序的资源地址。在游戏编程中,经常会用到它,所以,我们经常会将该值保存起来,方便后面使用。
2.创建windows应用程序的流程
主函数(WinMain->注册窗口类(RegisterClassEx->创建窗口(CreateWindowEx) ->消息循环(MainLoop),处理窗口过程(WinProc)。其中,窗口过程在消息循环中被反复调用。以下是算法伪代码:
[cpp] view plaincopy
1. WinMain() 
2.
3.     RegisterClassEx() 
4.     CreateWindowEx() 
5.     MainLoop() 
6.
7. MainLoop() 
8.
9.     while(true
10.     { 
11.         WinProc() 
12.     } 
13.


3.注册窗口类RegisterClassEx
窗口类,即窗口的类型,它并不是指C++中的类(class)。告诉操作系统即将创建什么样的窗口。
[cpp] view plaincopy
1. ATOM RegisterClassEx( 
2.   CONST WNDCLASSEX *lpwcx // class data 
3. ); 
4. typedef struct _WNDCLASSEX { //窗口类数据结构 
5.     UINT         cbSize;     //本结构大小 
6.     UINT         style;      //窗口类的样式 
7.     WNDPROC     lpfnWndProc;     //窗口过程函数指针 
8.     int          cbClsExtra;     //附加参数 
9.     int          cbWndExtra;     //附加参数 
10.     HINSTANCE   hInstance;   //应用程序实例句柄 
11.     HICON       hIcon;   //窗口图标 
12.     HCURSOR     hCursor;     //窗口光标 
13.     HBRUSH      hbrBackground;  //背景画刷 
14.     LPCTSTR     lpszMenuName;    //菜单名称 
15.     LPCTSTR     lpszClassName;  //窗口类名称 
16.     HICON       hIconSm;      //窗口小图标 
17. } WNDCLASSEX, *PWNDCLASSEX; 


4.创建窗口CreateWindowEx
[cpp] view plaincopy
1. HWND CreateWindowEx( 
2.   DWORD dwExStyle,     // extended window style扩展窗口样式 
3.   LPCTSTR lpClassName, // registered class name已注册的窗口类名称 
4.   LPCTSTR lpWindowName,// window name窗口标题 
5.   DWORD dwStyle,       // window style窗口样式 
6.   int x,               // horizontal position of window贪吃蛇的编程代码坐标x 
7.   int y,               // vertical position of window坐标y 
8.   int nWidth,          // window width窗口宽度 
9.   int nHeight,         // window height高度 
10.   HWND hWndParent,     // handle to parent or owner window父窗口 
11.   HMENU hMenu,         // menu handle or child identifier菜单句柄 
12.   HINSTANCE hInstance, // handle to application instance实例句柄 
13.   LPVOID lpParam        // window-creation data附加参数 
14. ); 


返回值是一个窗口句柄,句柄好比就是一个地址,标识了这个窗口的资源位置。
5.消息循环MainLoop
Windows程序都是基于消息机制的,所有的通信都是经过消息传递实现。
1) 消息MSG
[cpp] view plaincopy
1. typedef struct tagMSG { 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。