文章目录
考试内容
一、填空题(每空1分,共16分)
二、名词解释(每题3分,共18分)
三、简答题(每题4分,共16分)
四.设计题(10分)
1 二维游戏概览
早期的游戏都是二维的,如暗黑破坏神,只有两个轴(上下,左右)
很多RPG游戏是固定视角的2.5D
二维游戏对现在的编程仍然有意义,特别是现在的手机游戏
2 游戏循环概念
视频游戏是一个连续的循环,执行逻辑指令,并将图像输出到屏幕
计算机游戏的主要流程
二维游戏编程框架
Windows API + GDI
1、 利用WinMain()函数创建游戏入口;
2、注册Windows类;WNDCLASSEX
3、创建窗口; CreateWindowEx
4、显示和刷新窗口;ShowWindow、UpdateWindow
5、游戏消息循环(从事件句柄获得或向事件句柄传递Windows信息);PeekMessage
6、游戏事件处理函数WndProc;
很少使用GetMessage的原因:该函数在得不到消息的时候会一直等待直到得到消息为止,会造成游戏画面不能及时刷新,不连续性。建议使用PeekMessage
句柄:是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数
3 理解图像
3.1 图像表示
位图定义:一块由彩色点集组成的矩形区域
类型:
- DIB(设备无关位图)256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。
- DDB(设备有关位图,老Windows系统)存在于内存当中,颜色模式必需与输出设备相一致。在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。
位图(BMP)结构
- 文件头 :头信息
- 位图信息 :尺寸、存储顺序(从下到上、从左到右)
- 调色板 :一个查找表,RGB四元组
- 位图数据:RGB像素值、索引值(如果有调色板)
3.2 游戏中位图加载与显示
步骤
1)加载位图对象 LoadImage
2)建立与窗口DC兼容的内存DC CreateCompatibleDC
3)选用位图对象 SelectObject
4)将内存DC内容粘贴到窗口DC中,完成游戏画面的显示。 BitBlt
颜色混合与半透明
半透明图色彩 = 源图像色彩×(100% - 透明度)+背景图像色彩×透明度
画面透明效果:
a.将掩码图与背景图做“与”操作
b.将前景图与运算结果做“或”操作
4 地图的创建与显示
2D地图种类:正交、等轴、交错等轴、交错六边形
平面地图绘制
斜角地图绘制
景物地图贴图
用与地图数组同样大小的数组来定义。注意位置修正
地图绘制的优缺点
- 直接绘制地图:操作简单,但占用内存较多,加载速度较慢。
- 平面地图绘制:贴图直观,贴图内容具有一定灵活性,但缺少仿三维的立体感。
- 斜角地图:产生伪三维立体感,操作复杂,由于采用透明处理效果,绘制时间被延长。
- 景物地图:美观,需要坐标修正,加载时间更长。
5 游戏背景动画
单一滚动动画
每次需要背景画面更新时改变显示背景位图区域。
它是固定地图的进一步扩展,可以显示远大于固定地图的图像。
循环背景动画
单一滚动背景动画的背景尺寸要远大于游戏窗口尺寸,位图存储资源较大。
游戏中背景位图有相似性:
1)截取原始背景右边X宽度图像贴到内存DC当中
2)将剩余背景贴到内存DC原有图像的右侧
3)显示最终结果,X++,如大于背景宽度,重新归零
多背景循环动画
合适的使用情况:
- 需要小地图能重叠或者有层次关系;
- 在背景上有多个物体运动;
- 需要模拟物体远近不同的透视关系
实现思想:
在滚屏地图的基础上设置多个层次的地图。
不妨设从底往上分别为0层,1层,…把地图数据数组改为三维数组。
可以使每个图层以不同的速度运动,模拟景物远近不同的层次感。这种技术,又称视差卷轴