游戏编程设计资料

上传人:飞*** 文档编号:7138359 上传时间:2017-09-16 格式:DOC 页数:12 大小:196.50KB
返回 下载 相关 举报
游戏编程设计资料_第1页
第1页 / 共12页
游戏编程设计资料_第2页
第2页 / 共12页
游戏编程设计资料_第3页
第3页 / 共12页
游戏编程设计资料_第4页
第4页 / 共12页
游戏编程设计资料_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《游戏编程设计资料》由会员分享,可在线阅读,更多相关《游戏编程设计资料(12页珍藏版)》请在金锄头文库上搜索。

1、二维游戏程序部分1、 VC 中的绘图类(CBitmap,CBrush,CFont,CPen)的使用。(1)CPen 类是 CGdiObject 类的一个派生类,它封装了 Windows 图形设备接口(GDI)中有关画笔的操作。CPen pen;Pen.CreatePen(PS_SOLID,1,RGB(255,0,0);(画笔的风格,宽度,颜色)/定义一个 CPen 对象,用其成员函数CreatePen 或 CreatePenIndirect 对其进行初始化。CPen pen(PS_SOLID,1,RGB(255,0,RGB(255,0,0);/ 定义一个 CPen对象,并一次性地初始化它的所有

2、参数。(2)CBrush 类是 CGdiObject 类的一个派生类,它封装了 Windows 图形设备界面(GDI)中有关画刷的操作。CBrushbrush(RGB(255,0,0);/定义 CBrush 类对象,并利用构造函数对对象的参数进行初始化。(3)CFont 类是 CGdiObject 类的一个派生类,它封装了逻辑字体及方法。CFont 类只有一个构造函数,在定义了一个 CFont 类对象之后,必须用成员函数 CreateFont 或 CreateFontIndirect 来初始化 CFont 对象的参数。BOOL CreateFont(int nHeight, /以逻辑单位方式指

3、定字体的宽度int nWidth, /以逻辑单位方式指定字体中字符的平均宽度int nEscapement, /指定偏离垂线和 X 轴在显示面上的夹角(单位:0.1 度)int nOrientation, /指定符串基线和 X 轴之间的夹角(单位 :0.1 度)int nWeight, /指定字体镑数BYTE bItalic, /指定字体是否为斜体BYTE bUnderline, /指定字体是否带下划线BYTE cStrikeOut, /指定是否是字体字符突出BYTE nCharSet, /指定字体的字符集BYTE nOutPrecision, /指定所需的输出精度BYTE nClipPrec

4、ision, /指定所需的剪贴精度BYTE nQuality, /指示字体的输出质量BYTE nPitchAndFamily, /指定字体的间距和家族LPCTSTR lpszFacename /指定字体字样的名称 )(4)CBitmap 类和 Cpen、CBrush 类一样,是 CGdiObject 类的派生类,它封装了使用 Windows GDI 进行图形绘制中关于位图的操作。CreateBitmap 用一个指定宽度、高度和位图模式的依赖于设备的内存位图初始化位图对象。 CreateCompatibleBitmap 用一个位图初始化对象使之与指定设备兼容。在 CBitmap 类中重载了两个

5、LoadBitmap 函数,用于加载位图资源:BOOL LoadBitmap( LPCTSTR lpszResourceName );BOOL LoadBitmap( UINT nIDResource ) HBITMAP CreateBitmap(int nWidth,int nHeight, UINT cPlanes, UINT cBitsPeral,CONST VOID *lpvBits);nWidth:指定位图宽度、单位为像素。nHeight:指定位图高度、单位为像素。CPlanes:指定该设备使用的颜色位面数目。CBitsPerPel:指定用来区分单个像素点颜色的位数(比特数目)Lpv

6、Bits:指向颜色数据数组指针。2 、VC 中显示位图的过程,需要掌握的函数包括:GetClientRect( &rect);/取得客户区域大小CreateCompatibleDC(&dc);/创建适合指定 pDC 内存设备环境 mdc-CreateCompatibleDC(&dc);LoadImage(); /将位图装入内存mi-m_hObject(HBITMAP):LoadImage(NULL,str,IMAGE_BITMAP,440,74,LR_LOADFROMFILE);( 处理包含被装载图像模块的实例, 处理图像装载, 指定被装载图像类型, 指定图标或光标的宽度,指定图标或光标的高度

7、, 根据参数lpszName 的值装载图像)SelectObject(); /恢复设备环境 mdc1-SelectObject(bgbmp);BitBlt();/显示位图 dc.BitBlt(0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY);( 目标矩形区域左上角的 X,y 轴逻辑坐标, 目标矩形区域的逻辑宽度,高度,设备环境的句柄,源矩形区域左上角的 X,y 轴逻辑坐标,指定光栅操作代码)3 镂空图的原理及相关函数实现。(1) 获取图片背景设为黑色 0,0,0,前景色为彩色 1,2,3,图片蒙版前景色置为黑色 0,0,0,背景色置为白色255,255,2

8、55,利用 BitBlt 函数将蒙版与背景图做 AND 运算,并贴图到目的 DC。再将要镂空的图与背景图做 OR 运算,贴图到目的 DC:(2)相关函数: GetClientRect(&rect);/取得客户取大小mdc-CreateCompatibleDC(pDC);/建立内存 DCbgbmp-m_hObject=(HBITMAP):LoadImage(NULL,b1.bmp,IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE);/加载背景位图bitmap-m_hObject=(HBITMAP):LoadImage(NULL,man.bmp

9、,IMAGE_BITMAP,208,154,LR_LOADFROMFILE); mdc-SelectObject(m_bgBmp);/取得背景图mdc-BitBlt(0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY);/贴背景图mdc-SelectObject(m_manBmp);mdc-BitBlt(250,150,104,154,mdc,104,0,SRCAND);/将蒙版与背景图做 AND 运算mdc-BitBlt(250,150,104,154,mdc,0,0,SRCPAINT);/将要镂空的图与背景图做 OR 运算4、定时器的使用方法。(1)在 W

10、M_CREATE 中设置定时器 UINT SetTimer(1,100,NULL);(窗口句柄,定时器 ID,时间间隔,单位为毫秒,) 设置并启动一个时间间隔为 100ms 的定时器,消息响应函数是 onTimer();(2)在 WM_TIMER 消息中响应定时器(3)调用 KillTimer 来取消定时器。在 MFC 程序中我们可以直接调用 KillTimer(int nIDEvent)来取消定时器。当设置多个定时器时 if(nIDEvent=2)5. 粒子系统的实现。粒子系统都由大量的粒子构成,每个粒子都有一组属性,如位置、大小以及纹理度等属性。粒子属性的初始值常常都是随机值,而粒子的产生

11、也常常是由位于空间中某个位置的粒子源产生的。我们会根据预定的要求,产生一定数目的新粒子。粒子的各项初始属性都可以用 rand 函数来在一定的范围内赋上随机的值。粒子有位置和移动速度,自旋速度等等属性,这就需要在每一帧当中根据原来的粒子的位置、移动速度和自旋速度重新进行计算和赋值更新。struct snow int x;int y;BOOL exist;int i,count;snow drop50;void canvasFrame:OnTimer(UINT nIDEvent) if(countGetObject(sizeof(BITMAP),&bm);/ int GetObject(HGDIO

12、BJ hgdiobj, int cbBuffer, LPVOID lpvObject);( 指向感兴趣的图形对象的句柄, 指定将要写到缓冲区的信息的字节数目, 指向一个缓冲区的 指针 该缓冲区将要检索指定图形对象的信息)unsigned char *px1 = new unsigned charbm.bmHeight*bm.bmWidthBytes;hmask-GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1);/ LONG GetBitmapBits(HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits);( 指向感

13、兴趣的位图的句柄,;指定要从位图拷贝到缓冲区的字节数。指向接收位图位数据的缓冲区指针;这些位是按字节类型存储在数组中的)int rgb_b,PixelBytes,tx,ty;PixelBytes = bm.bmBitsPixel / 8;for (ty=0;ty=poscount.x)&(point.y=poscount.y-40)&(point.xconst GLdouble Pi = 3.1415926536;void myDisplay(void)int i;/ glShadeModel(GL_FLAT);glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_T

14、RIANGLE_FAN);glColor3f(1.0f, 1.0f, 1.0f);glVertex2f(0.0f, 0.0f); for(i=0; i=8; +i)glColor3f(i&0x04, i&0x02, i&0x01);glVertex2f(cos(i*Pi/4), sin(i*Pi/4);glEnd();glFlush();相关函数:glShadeModel();OpenGL 允许为同一多边形的不同顶点指定不同的颜色,使用 glShadeModel 函数可以关闭这种计算,如果顶点的颜色不同,则将顶点之间的其它点全部设置为与某一个点相同。 (直线以后指定的点的颜色为准,而多边形将以

15、任意顶点的颜色为准,由实现决定。 )为了避免这个不确定性,尽量在多边形中使用同一种颜色。glShadeModel 的使用方法:glShadeModel(GL_SMOOTH); / 平滑方式,这也是默认方式glShadeModel(GL_FLAT); / 单色方式glMatrixMode(GL_MODELVIEW);由于模型和视图的变换都通过矩阵运算来实现,在进行变换前,应先设置当前操作的矩阵为“模型视图矩阵” 。glMatrixMode(GL_PROJECTION);/ 投影变换就是定义一个可视空间,可视空间以外的物体不会被绘制到屏幕上。(注意,从现在起,坐标可以不再是-1.0 到 1.0 了!)OpenGL 支持两种类型的投影变换,即透视投影和正投影。投影也是使用矩阵来实现的。如果需要操作投影矩阵,如果需要操作投影矩阵,需要以 GL_PROJECTION 为参数调用glLoadIdentity();/把当前矩阵设置为单位矩阵。glTranslate*();/把当前矩阵和一个表示移动物体的矩阵相乘。三个参数分别表示了在三个坐标上的位移值。glRotate*();/把当前矩阵和一个表示旋转物体的矩阵相乘。物体将绕着(0,0,0)到(x,y,z)的直线以逆

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号