开元周游
德国频道
查看: 1576|回复: 1
打印 上一主题 下一主题

电脑游戏制作初探 - DirectX简明教程

[复制链接]
1#
发表于 5.11.2002 22:31:15 | 只看该作者
一、也谈DirectX<br /> DirectX的出现不但导致在Windows上的游戏空前繁荣,连很多图形应用程序也受益于它。在这之前Windows不能访问低端硬件资源,因为Windows的特性就是设备无关性,它尽量使你编写的代码和具体硬件没有关系而操纵同类硬件。这样有好处也有坏处,好处是你写的代码程序会很稳定并可以在任何机器上运行,坏处是程序运行速度变慢。在早期的Windows 3.x时代由于没有DirectX,程序员只能靠GDI来编程,无论是编绘图程序还是游戏都必须用GDI。我看过早期在Windows 3.x绘制3D图像的程序都是大量调用GDI来完成的,看得我头皮直发麻。可以想象一下在486上用GDI画3D图像应该是个什么速度?<br /><br /> GDI不能直接访问显存,也不能直接访问任何图形硬件,它是调用显示卡和打印机等驱动程序来工作的。所有用到硬件的代码都必须经过它才能到达硬件,也就是说,GDI是程序员和显示硬件之间的隔离层,不仅如此,GDI还会让用DOS的程序员发晕。考级学Turbo C的朋友可能接触过C的图形函数,知道在DOS上做图是什么样的,可是GDI和那些东西是两码事,你会发现GDI里面有画笔画刷等一系列古怪概念,甚至有人总是怀疑是否存在画笔等硬件。就是由于这种概念的隔离使得GDI非常慢,其实Windows操纵的是和DOS一样的图形硬件,怎么会出现画笔等概念呢?这就是设备无关性,它让你感觉不到你操作的是硬件。但这种设备无关性是相对的,我在使用DirectX时也发现了这个问题,DirectX在工作时不是把每一台机器都当作一模一样的计算机,那样的话会导致你的游戏在某些机器上跑不起来。你必须在游戏正式运行前检测你所需要的硬件功能在此机器上是否都支持,这样才能确保你的游戏能顺利地运行起来,比如某些游戏运行前需要检测巫毒卡是否存在或像《三角洲3》一样在运行前检测显示模式等。也就是说DirectX算是个与硬件有/无关参半的东西,不过由于这个原因导致使用DirectX的应用程序要比不使用DirectX的应用程序的兼容性差。就我个人的看法是2D的兼容性基本上没什么问题,主要是3D方面不能统一,不过各大厂商都尽量兼容Direct3D。在编程方面最好别存在太多的侥幸心理,因为某些显卡实在太特别,没准哪天你编的游戏在别人的机器上一跑就会出问题,所以在编写正式的游戏代码前最好还是做一番必要的检查。<br />  <br />二、怎样学习DirectX<br /><br /> 声明一下,我讲的是DX7,因为DX8和以往的DX有很大不同,连核心组件DirectDraw都没了(合并到Direct3D里了),所以DX3~DX7的资料在国内还是流传比较多的,大家可以容易找到一些资料。<br /><br /> DX难学不难学我就不谈了,大家自己往里钻就知道了,我只是想让在这方面摸不着门的朋友知道怎样学习DirectX。首先我们要学会一门Windows上的语言,VB、VC、J++都可以,这是使用DX的基础,然后就是找到DX的资料,也就是DX的SDK(软件开发包),微软的DXSDK是免费的,你可以从它的网站上下载或买一本介绍DX的书,里面一般都会带有DXSDK。不过一般都是老一点的SDK,不是最新版本,不过总算是能找到一个全一点的SDK。如果你非要赶潮流的话最好还是从网站上下载最新版的SDK,那里的资料全是最新的,包括完整的示例、文档以及开发库等是齐全的,只是非常大,记得我在微软要下载DX7SDK时发现上面说需要11个多小时300多兆大小,我一心软没敢下,只下载了一个DX7的帮助文件。所以找不到DX7SDK的朋友去微软网站下个帮助和C++的头文件运行时库就行了,没多大,就是帮助大了点,大概是14MB。如果直接攻读DX8会更好一些,因为整个SDK才15.4MB,就是里面的内容和以往都不一样了,资料比较难寻。<br /><br /> 我是从DX5开始学的,DX2到DX8都用过。DX7以前的版本较难用,稳定性不是很高,编程序必须非常谨慎,如果出了错就会蓝屏、非法操作,甚至能把VC、VB给蹬出去,所以建议从DX7学起。DX7和以前版本的DX接口几乎一样,所不同的是它比以前更方便了,但基本的功能是一样的。比如说以前的DirectDraw没有将图像直接装入图面的功能,在DX7中就直接有这种功能了。在DX7前都是靠用GDI等其它Windows组件来联合使用DX的,但随着DX的加强,这些零碎功能都被集成进DX。<br /><br /> 最后我极力建议使用VB来学习DX,因为VB可以解释执行,可以方便调试练习,这让人很容易就能学会DX,而且DX的接口基本上是一样的,所以VB和VC调用DX大同小异。<br /><br />三、DirectX的运行时库和头文件<br /><br /> DirectX是基于COM的,所以访问DirectX的组件都是类对象方式的,如DirectDraw7.CreateSurface就是通过DirectDraw7接口的CreateSurface方法来创建图面对象。在Visual Basic中可以按F2键来看里面的所有组件,如果是C++则可以看DirectX各组件的头文件来查看里面的各种定义。用Visual C++浏览DirectX组件的头文件来查看里面定义的内容。<br /><br /> 编程序不能嫌麻烦,如果你觉得头文件很麻烦就不看了,那就大错特错了。很多时候你发现别人谈论DX的东西你没听过,其实他们不是从头文件里翻到的就是从帮助文档中看到的,这些东西里面有很多细节,比翻译的书写得还细。<br /><br />四、DirectX的性能和评价<br /><br /> DX是夹在驱动程序和应用程序之间的东西,所以它的速度是折中的。我可以肯定地告诉大家,用它编写的游戏没有在DOS下编写的游戏快。不过这不能说它不好,因为它存在的价值也是折中的,它的好处是兼容性和开发速度。以往我们在DOS上开发游戏都是很自由灵活的,我们可以随便访问图形硬件和系统的各个角落,有些编程人员甚至进入到系统的深层,他的能力足以让系统立即崩溃。但到了今天,人们不希望程序这样发展,因为这样作会使操作系统会变得很不稳定。由于当年的DOS系统技术十分公开,所以对DOS了解比较深的程序员比比皆是,再加上DOS本身漏洞,导致DOS系统上出现了很多病毒。在游戏制作方面,DOS系统也几乎是什么忙也帮不上,一般游戏的开发人员也就用一下DOS的文件处理功能,其它的基本用不上。<br /><br /> 但为什么说DOS快,因为DOS上的游戏基本上都是自带干粮型的,它们很少使用DOS的服务,大部分图形操作都是基于BIOS,有的人甚至绕过BIOS直接操作硬件,因为他们嫌BIOS慢。这就需要自己开发硬件的驱动程序,而且每一个游戏都是用自己的驱动程序驱动起来的,这就使得编写DOS游戏成为一件很困难的事,而为了解决这个问题微软才出了DirectX。这让许多开发DOS游戏的老程序员舒了一口气,因为他们可以集中力量来开发游戏的代码而从该死的硬件驱动中解脱出来;还有一个顾虑就是老DOS游戏总是不能支持新的硬件设备,因为在游戏制作时这些新硬件还没出现,结果用户刚买来的方向盘可能就不能在老的赛车游戏中使用。随着硬件技术的飞速发展,电脑外设和其它硬件变得越来越多,使得游戏公司再也没有能力开发出支持更多设备的驱动程序,所以DirectX的出现是必然的。微软每更新一次DirectX就会支持市面上最新的硬件设备,而且会自动代替旧的功能,这些大家都是有体会的,在安装了新版本的DX后不但能支持最新的游戏还能使老游戏的质量有所提高,这就是它的特性。虽然DX损失了一定的速度但却缩短了游戏开发时间,所以Windows的游戏市场变得异常繁荣。<br /><br /> 在使用DirectX时一般都认为它比较难用,我个人认为这主要是由于微软想支持所有硬件而引起的,比如说DirectInput被微软设计成不但支持鼠标、键盘、摇杆还支持任意设备,所以它在设计时就不能设计得太死板了,也就是说得留下一定的灵活性来支持任意设备,但由于设备之间可能会没什么共性,所以在设计时就必须考虑到尽量将未来设备的可能性质都包容进去,这当然会造成使用的困难。不过为了使基本的设备简单一些,微软对普通的鼠标、键盘、手柄等都做了特定的封装,这使得使用基本输入设备的程序可以不用太多的周折就可以方便地使用这些基本设备。<br /><br />五、DirectX SDK<br /> DX的SDK越来越方便了,可惜例子不太丰富。从DX7开始都有VB的例子,不过没有其它语种的例子,这让懂其它语言的开发人员很别扭,可能是微软想让软件商尽量使用他们开发的VB、VC吧。我个人建议大家尽量收集以前的SDK,因为DXSDK每一版所带的例子都和前一版不一样,谈不上哪个好哪个不好,但收集大量的程序例子可以给我们带来很多启示和帮助,而且以前的SDK例子是非常丰富的,列举的也很全。<br /><br /> DXSDK基本上就是一堆例子和说明文档。也有一些是工具,如检测显示设备性能的工具,它会显示出一份非常详细的报表,你可以仔细查询计算机系统的显示能力。<br /><br /> 也可以利用这些工具来排除一些错误。在以前版本的SDK中还有很多有趣的小例子,如FoxBear(狐狸和熊)、SpaceBrouhaha(在太空呼喊)等有趣的例子,不但能玩而且还有源代码,你可以从中学到很多东西。
2#
发表于 25.1.2005 02:10:33 | 只看该作者
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点信息

站点统计| 举报| Archiver| 手机版| 小黑屋

Powered by Discuz! X3.2 © 2001-2014 Comsenz Inc.

GMT+1, 15.11.2024 17:48

关于我们|Apps

() 开元网

快速回复 返回顶部 返回列表