windows游戏编程 第八章

windows游戏编程 第八章

ID:25990473

大小:1.87 MB

页数:48页

时间:2018-11-24

windows游戏编程 第八章_第1页
windows游戏编程 第八章_第2页
windows游戏编程 第八章_第3页
windows游戏编程 第八章_第4页
windows游戏编程 第八章_第5页
资源描述:

《windows游戏编程 第八章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、•345•第8章生成游戏第8章生成游戏在第六章中策划了一个游戏,并做了三个例子。其中最后一个例子已经具有游戏的外形了。但距离所策划的那个游戏所要达到的效果还很远。本章将把角色动画、场景转换、立体效果、怪物、音效以及本章即将介绍的文字显示系统、战斗系统和人工智能加入游戏中。把这些功能都加入游戏后,将使游戏变得更加完善。8.1文字显示系统在不使用DirectDraw的应用程序中,很容易显示文字;只需产生一个WM_PAINT消息,再获得设备内容句柄,调用GDI函数就可以显示文字了。而使用了DirectDraw的应用程序特别是游戏程序中,使用上面的方法显示会出现一些怪现象。

2、因为,游戏程序的运行过程是这样的:在消息机制中不断地循环显示后台缓冲表面中的内容。当在一个WM_PAINT消息中显示文字后,将被后台表面的内容的覆盖;而显示文字的这个过程不一定与消息机制的循环相同步;所以,会出现文字的闪烁现象。为了不产生文字的闪烁现象,应该把文字显示在后台表面或者其他的表面上,再通过消息机制把这些表面的内容显示在客户区上,就不会出现闪烁现象了。这一节主要讨论如何在表面中显示文字。8.1.1获得表面的设备内容要调用GDI函数接口显示文字,就必须获得设备内容。可以通过调用IDirectDrawSurface7::GetDC方法获得表面设备内容,其只有一

3、个指向设备内容变量的指针参数。调用IDirectDrawSurface7::ReleaseDC方法则释放指定的设备内容,其参数表示设备内容。所以,要在指定表面显示文字的通常做法是这样的:HDChdc;Surf->GetDC(&hdc);TextOut(hdc,......);//显示文字Surf->ReleaseDC(hdc);其中Surf表示表面指针。•345•第8章生成游戏8.1.2建立文字显示类游戏的程序在每次消息机制循环时都把新的内容放入后台缓冲表面,就是说,如果在后台缓冲表面中显示文字,文字只被显示一次(速度快的个人电脑将看不到显示的文字)。在大多数情况下

4、,只在后台缓冲表面中显示文字。所以有必要设置文字的显示时间。把文字的显示归为一个类,对于设置文字的显示时间是很容易的事情。本小节将建立一个文字显示类CText。1.定义CText类CText类的定义代码在CText.h文件里。该文件的代码如下:/*---------------------------------------------------

5、CText.h

6、字符串输出相关功能声明

7、(c)mochsh,2004-----------------------------------------------------*/#include#i

8、nclude#include#defineMAX_TEXT200typedefstructTEXTDESC{LPDIRECTDRAWSURFACE7lpSurf;//在哪个表面显示POINTPos;//在什么位置显示TCHARText[MAX_TEXT];//指向的字符串DWORDcolor;//字符的颜色DWORDStartTime;//开始显示的时间DWORDLastTime;//显示多长时间TEXTDESC*next;//链表节点}TEXTDESC,*PTEXTDESC;classCText{protected:DWORDT

9、ime;//当前时间PTEXTDESCpText;//字符串链表LPDIRECTDRAWSURFACE7lpDDSBack;//后台缓冲表面public://获得后台缓冲表面voidSet_lpDDSBack(•345•第8章生成游戏LPDIRECTDRAWSURFACE7lpBackSurf){lpDDSBack=lpBackSurf;}//构造函数CText();//析构函数~CText();//删除字符串链表voidDeleteText(void);//获得要显示的字符串并设置对应字符描述的属性voidGetText(LPDIRECTDRAWSURFACE7l

10、pSurf,LONGx,LONGy,LPCSTRlpText,DWORDcolor,DWORDLastTime);//获得要显示的整数并设置对应字符描述的属性voidGetText(LPDIRECTDRAWSURFACE7lpSurf,LONGx,LONGy,LONGlNumber,DWORDcolor,DWORDLastTime);//获得要显示的浮点数并设置对应字符描述的属性voidGetText(LPDIRECTDRAWSURFACE7lpSurf,LONGx,LONGy,FLOATfNumber,DWORDcolor,DWORDLastTime);//指

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。