游戏编程导论 Chapter-05_第1页
游戏编程导论 Chapter-05_第2页
游戏编程导论 Chapter-05_第3页
游戏编程导论 Chapter-05_第4页
游戏编程导论 Chapter-05_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章 为引擎添加位图操作模块内容提纲 5.1 位图操作类的设计与实现5.1.1 位图操作类需求分析5.1.2 位图操作类的定义5.1.3 位图操作类的实现5.2 利用位图操作类设计游戏菜单类5.2.1 游戏菜单类的需求分析5.2.2 游戏菜单类的定义5.2.3 游戏菜单类的实现5.3 游戏菜单类应用实例第5章 为引擎添加位图操作模块为游戏引擎框架添加一个重要模块位图操作模块,该模块将以类的方式进行封装。由于这个模块与图形操作相关,就将这个模块命名为T_Graphic类。5.1 位图操作类的设计与实现5.1.1 位图操作类需求分析T_Graphic位图操作类主要提供位图加载、位图绘制以及文字绘

2、制等功能。提供以下几种绘制处理:1.原始位图的简单绘制;2.将原始位图进行缩放绘制;3.将原始位图进行缩放处理并指定透明度绘制;4.绘制指定背景颜色和透明度的空白位图;5.读取原始位图中的局部区域,并可对这个局部区域进行缩放、指定透明度以及旋转或翻转处理后绘制。该处理已经实现,即PaintRegion()函数;6.逐帧动画绘制,以PaintRegion()函数为基础实现PaintFrame()函数;7. 文字绘制。PaintText()函数就是处理文字绘制的函数,无需再实现。8.设备环境的清除处理。有时需要清除当前设备环境中原来图形的痕迹,以便绘制新的游戏画面,需要一个专门函数来执行这个任务。

3、5.1 位图操作类的设计与实现5.1.2-5.1.3 位图操作类的定义和实现位图操作类分别在T_Graphic.h和T_Graphic.cpp中实现。T_Graphic类定义和实现:实现代码请参见教程类函数说明:HBITMAP_To_Bitmap()、PaintRegion()、和PaintText()函数的功能与上一章中阐述的同名函数一致。这3个函数可以参见上一章的实现代码。 T_Graph类中的PaintImage()函数有3个重载形式:有3个参数的原型声明用于原始位图的简单绘制;有5个参数的PaintImage()函数用于位图缩放绘制;有6个参数的PaintImage()函数可以用指定透

4、明度对原始位图进行缩放绘制。三个PaintBlank()函数都可以实现空白位图的绘制:4个参数的PaintBlank()函数将第一个位图句柄参数指定的位图填充最后一个参数指定的颜色;6个参数的PaintBlank()函数采用GDI+实现,位图透明度和颜色是通过其中的Color参数来指定;7个参数的PaintBlank()函数是采用GDI的AlphaBlend()函数实现相同的效果。CreateBlankBitmap()函数用于创建指定宽高和颜色的空白位图;PaintFrame()函数专门用于动画播放处理。5.2 利用位图操作类设计游戏菜单类游戏菜单一般要求比较个性化,要与游戏内容和画面风格相统

5、一,会采用专门设计的图形或图像来表现。 5.2 利用位图操作类设计游戏菜单类以图片作为菜单项的设计中,每一个菜单项至少由两张内容相同,但在色调、颜色、大小或亮度等方面有一定差异的图片组成。其中一张作为正常显示用,另一张作为被选中时使用。5.2 利用位图操作类设计游戏菜单类5.2.1 游戏菜单类的需求分析T_Menu类专门用于处理游戏开始界面和游戏结束、升级或暂停界面中的菜单菜单可以以纯文字的形式呈现,也可以以图片的形式呈现菜单的位置、菜单项文字、菜单个数、排列方式或在界面上的具体位置都可以按照要求设置菜单可以设置背景,支持纯色背景或背景图片。背景图片还可以设置透明度本菜单类可以处理鼠标事件和键

6、盘事件。5.2 利用位图操作类设计游戏菜单类5.2.2-5.2.3 游戏菜单类的定义和实现菜单类将分别在T_Menu.h和T_Menu.cpp中实现。T_Menu类的定义和实现:实现代码请参见教程T_Menu类的函数分类: 信息设置函数:SetMenuBkg():设置菜单背景图片SetBtnBmp():设置菜单中每个菜单项对应的图片,只要指定图片文件的路径和文件名SetMenuInfo():将一个MENU_INFO结构体对象的值赋给T_Menu类中的同类型变量AddMenuItem():置菜单项,菜单项关键信息就是文字内容和在界面上的位置5.2 利用位图操作类设计游戏菜单类操作函数:DrawM

7、enu():菜单绘制函数;MenuMouseClick():菜单鼠标点击事件处理函数MenuMouseMove():菜单鼠标移动事件处理函数MenuKeyDown():菜单键盘事件处理函数DestroyAll():清空记录菜单项信息的vector容器中的数据菜单索引值的获取和修改函数:GetMenuIndex():计算当前鼠标光标所在位置是否在某个菜单项的矩形范围内,如果是则返回该菜单项的索引号,供菜单绘制时使用SetMenuIndex():设置菜单当前的索引号供类内部使用的私有函数:GetAlignment ():将菜单信息中的对齐方式设置值转换成能够被函数调用识别的值GetFontStyl

8、e():将菜单信息中的字体风格的设置值转换成能够被函数调用识别的值5.2 利用位图操作类设计游戏菜单类归纳:到目前为止,游戏引擎已经具备以下文件T_Config.h头文件T_Display类(包括T_Display.h和T_Display.cpp文件)T_Engine类(包括T_Engine.h和T_Engine.cpp文件)T_Graph类(包括T_Graph.h和T_Graph.cpp文件)T_Menu类(包括T_Menu.h和T_Menu.cpp文件) 5.3 游戏菜单类应用实例准备图片素材:5.3 游戏菜单类应用实例拷贝3个图片素材文件到项目的res目录中,分别命名:“menubkg.

9、jpg”“redroundbtn.png”“button.png”;菜单项:“新游戏”、“关于”、“帮助”、“退出游戏”;将上一章构建的项目拷贝一个副本,然后打开副本项目中的GdiplusTest.h头文件,在其中基本代码的基础上,添加T_Menu.h头文件引用语句,并定义一个T_Menu类对象。具体实现请参见教程和代码工程。 5.3 游戏菜单类应用实例最终实现的效果:5.3 游戏菜单类应用实例将菜单项水平居中方式布局的代码:/ 水平居中布局的坐标x =i*(btn_width+MENU_SPACE)+(wndWidth - 4*btn_width - 3*MENU_SPACE)/2;y =

10、wnd_height-2*btn_height;5.3 游戏菜单类应用实例将菜单项阶梯方式布局的代码:/ 阶梯布局的坐标x =(wndWidth - btn_width)/2-btn_width+i*(btn_width/2);y = i*(btn_height+MENU_SPACE)+(wnd_height-4*btn_height-3*MENU_SPACE)/2;5.3 游戏菜单类应用实例将菜单项双行双列方式的布局的代码:/ 2行2列坐标int col = i%2;int row = i/2; x = col*(btn_width+MENU_SPACE)+(wndWidth - 2*btn

11、_width-MENU_SPACE)/2;y = row*(btn_height+MENU_SPACE)+(wnd_height-2*btn_height-MENU_SPACE)/2;5.3 游戏菜单类应用实例将菜单项图片改为圆形按钮图像,修改对应的文字颜色,产生上面四种同样布局的圆形菜单项的效果:/ 圆形按钮菜单项btn_width = 120;/ 菜单项图片宽btn_height = 120;/ 菜单项图片高normalClr = Color:White;/ 正常状态文字颜色focusClr = Color:Yellow;/ 选中状态文字颜色/ 菜单项图片t_menu.SetBtnBmp(L

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论