77范文网 - 专业文章范例文档资料分享平台

游戏编程文章搜集资料

来源:网络收集 时间:2019-04-13 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

游戏编程文章搜集资料

游戏开发—图形图像篇

游戏开发--开篇

记得我第一次玩的PC game 是KKND(绝地风暴),当时的游戏平台是DOS,我只是觉得很好玩,经常和几个小学同学一起厮杀到12点。可是现在回忆起来,KKND无论是从智能设计还是在游戏画面与操作上都是非常出色的。他的音效同样是很棒的,而且全中文配音让当时很多不懂英语的玩家找到了许多的亲切感。这真是一款很棒的游戏。It is great!

我想,这样的感觉是许多游戏开发者或者梦想成为游戏开发者的人们所共同经历的感受。一款好游戏会带给人们很多东西,会带给社会很多东西。 在人的层面上,无论是\大富翁\让我们娱乐,还是\文明\让我们感受科技发展带来的成果与思考,在我们玩一个游戏的时候,我们读到的故事,经历的坎坷,解决的问题,无时无刻不在让我们感受着游戏之外的很多东西。 在社会的层面上,游戏产业就本身而言,市场不断扩大,需求不断增多;更重要的是,他带动了出版、通信等相关产业的迅猛增长。游戏与相关产业增长的比值有时甚至是1:100。现在看看韩国政府对于游戏产业的支持,就有\醉翁之意不在酒\的感觉了。

中国的游戏产业将在2005年左右达到10美元的市场,我们国人绝不应放弃这个发展的大好机会。其实,我们可以看到现在有很多的游戏公司,看起来像是一片欣欣向荣、蓬勃发展的场面,但是这里面又有多少是搞游戏开发的呢?是少之又少。很多公司都是代理国外的游戏,这样一来,国外很多的游戏开发厂商获得了大量的利润,而我们在为小蛋糕争得你死我活时,别人已经各自享用着自己的大餐了。资金不足无疑是各个公司搞游戏代理的最主要理由。但是我们可以看到,像CS这样成功的Garage Game,我们为什么做不出来?答案很多,问题很多,我们要做的事情很多。 于是,本着从我做起的原则,还是应该不断以提高自身的能力为主。毕竟我们和外国走的路不同,我们要找到适合自己的发展道路,走出一条具有中国特色的产业发展路线。当然,在路上我们还要不断的学习。

所以,在我学习游戏开发的过程中,看到了我们中国学生的很多文章,有很多都是很有水平的。于是自己也提起笔来,把自己学习的经验和心得写下来,和大家一起讨论和提高。 这一系列的文章主要是面向想学习游戏开发的朋友,文章是从实际开发源代码的角度去介绍游戏开发的各个方面(文章中的示例代码用C++编写),但是瓦文章并不是完全地教学,更像是一个游戏开发的学习索引。它告诉初学者,做什么游戏需要什么技术,指引他们去学习某项技术,从而真正回归到自己学习的乐趣中来,为最终游戏的设计和实现奠定基础。

游戏开发--图形图像篇(一)

一个游戏的好坏谁说了算? 玩家。

玩家如何看一个游戏?

用眼睛。

那么这款游戏怎么样? \画面真棒!\ … …

你的游戏做得再好,如果没有一个很好的图形效果,那展现在玩家眼前的东西将大打折扣。而且,你的游戏也不会得到很好的支持。为什么呢?因为你的游戏无需使用很好的显示设备和图形加速设备,硬件厂商不会理睬你的游戏。这也就和开篇所说的\游戏促进相关产业的发展\的职责相悖了。所以,在写一个游戏之前,想一想开发这个游戏需要什么技能,\磨刀不误砍柴工\。让我们开始吧,先学一学游戏的图形开发。

一. Windows 绘图接口

1.GDI/GDI+

在开始前先让我们看一个具体的例子。

这个小程序的图形显示部分就是用GDI编写的。

我们在编写Windows应用程序的时候,经常会用到GDI/GDI+(Graghic Deice Interface,图形设备接口)。GDI是Windows早期版本中包括的图形设备接口,而GDI+是GDI的改进版本,对GDI的现存性能进行了优化,而且增加了很多新性能。

GDI/GDI+的结构如下图:

GDI+的C++接口中包括大约40个类、50个枚举和6个结构。听起来虽然不多,但是这也足够胜任大多数应用了。

GDI编写程序的优点是他基本上兼容所有的显示设备,但是这是以损失效率为代价的。通常,编写应用程序时,大多数桌面应用程序用到的只是相对稳定的图形图像显示,所以在这种情况下,使用GDI是很实用的。

可是,在开发对图形图像显示速度要求非常高的游戏程序时,GDI就显得不够强劲了。所以,我们把开发游戏的图形图像显示部分的重担交给了下面就要介绍的DirectX。

GDI学习参考:《Windows Program With MFC》中的GDI部分。

2.DirectX

谈到DirectX或许你不会陌生,因为像很多大名鼎鼎的FPS游戏都是用它来开发的。这其中有Valve小组的Half Life及其衍生作品--CS。所以,DirectX已经成为了游戏开发所不可或缺的重要组成部分。

还是先让我们看一个小程序。

[program MovePicture v0.3]

DirectDraw 与 DirectInput 的游戏编程体验

我想关于这个主题的文章,不算少,但也不算太多。但大多是分别介绍

DirectDraw 与 DirectInput,而并没有将其结合起来,也许你会问:“分开与合并起来并没有本质区别啊!”。其实的确没有本质区别,但那样使那些最初对游戏编程报有极大热情的爱好者感到非常失望,因为这其中的一个并不能完全满足他们的要求,并且使其感到巨大的阻力,从而失去信心。所以本文将

DirectDraw 与 DirectInput结合起来去讲一个主题就是“游戏编程”,请注意是“游戏编程”,当然这只是一个简单的桌面游戏,但这已经与先前有很大的不同了,这已不是简单的 DirectDraw或 DirectInput编程。我想你现在应该能够体会出其中的区别了。

声明:在这之前需要你具有一定的 WIN32 API 函数的知识,并且可以熟练使用。和 DirectDraw的知识,关于DirectDraw可以参见 www.frontfree.net 中的 <<动画程序编写——DirectDraw之旅>> 1-3),或其它文章。最后是 c++ 语言,当然也要包括面向对象的那部分。在 Visual C++ .NET 编译环境下进行开发的。

首先 ,我们还是先简要复习一下DirectDraw的概念吧!

DirectDraw本质上是显存管理程序。它最重要的性能是允许程序员直接在显存里存储和操纵位图。它使你能够利用视频硬件bliter(位块传输器)在显存内部进行位图的blit(位块传输)。用视频硬件的blitter从显存向显存进行blit比从内存向显存更快。这在64位显卡向显存提供64位数据路径的今天显得尤其重要,硬件独立于促CPU进行位块传输操作,使得CPU得以继续工作。另外DirectDraw支持显卡的其他硬件加速特性,例如对精灵和z -buffering的硬件支持。

DirectDraw的工作原理

我们这里还是用图表方式展现给大家吧!

细心的朋友可以很明显地注意到图示中的右上角的图解中说明,表面对象有两个宽度,一个是WIDTH,一个是PITCH。WIDTH就是创建表面时所给出的那个宽度,而PITCH是表面的实际宽度,是按字节算的。在许多显卡上,PITCH和WIDTH是相等的,比如在640x480的高彩模式下,PITCH为1280。而在某些显卡上,PITCH比WIDTH要大。比如在640x480的256色模式下,当WIDTH是640时,PITCH为1024而不是640,这些显卡这样做是为了更好地进行数据对齐来提高性能或达到其它目的。所以,我们在实际编程时,为了保证程序的兼容性,必须按PITCH处理。 但这些硬件的底层问题,我们不用太关心,只要稍有了解就可以了。 下面我们再简要叙述一下,如何使用 DirectX 9.0 中提供的 DirectDraw 类库来创建对象并使用操作对象。

宏定义在先,定义删除指针和释放对象的宏

#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } 先创建一个 CDisplay 的全局对象 CDisplay就是ddutil.h中定义的类,用于处理表面之间的拷贝翻页等操作的类,再次定义一个全局变量,用于以后对指向的表面之间进行操作

CDisplay* g_pDisplay = NULL;

然后创建表面,当然可以创建很多的表面,这些表面都是离屏表面,在更新画面时,都可以用 CDisplay 类的对象中的方法,将其拷贝到后备缓冲区表面上。只要创建离屏表面,就要用到 CSurface 类。CSurface也是ddutil.h头文件中定义的类,用于对表面本身进行操作,如设置色彩键码,在此定义的图画指针。

CSurface* g_pBackSurface = NULL;

DirectX 中就一共用这两个类封装了 DirectDraw 对象的大部分操作,如果你觉得这还不能满足要求,那么你也可以在程序中用 DirectDraw API 函数编写程序,不过在本文中不再介绍。

这之后,我们会用到 InitDirectDraw 函数。这个函数是我们自己创建的。在此函数中作所有的 DirectDraw 的对象初始化工作。

HRESULT InitDirectDraw( HWND hWnd ) {

HRESULT hr; //接受返回值,其实是long型变量

LPDIRECTDRAWPALETTE pDDPal = NULL; //定义程序中的调色板 int iSprite; //定义与sprite个数有关的计数器

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库游戏编程文章搜集资料在线全文阅读。

游戏编程文章搜集资料.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/585864.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: