转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
用VB编写DirectX7.0游戏         ★★★★

用VB编写DirectX7.0游戏

作者:闵涛 文章来源:闵涛的学习笔记 点击数:761 更新时间:2009/4/23 14:59:33
   DirectX7.0终于出现了,同前面DirectX6相同,版本7也带了一个庞大(129M)的SDK开发库,同DirectX6 SDK库相比,DirectX7的SDK库提供了以下新的功能:

  * 对于Visual Basic的支持。用户可以使用类库在Visual Basic环境下开发基于DirectX的程序。

  * 提供更多DirectX3D立即模式(Immediate Mode)下的API函数,以支持DirectX7中新的3D特效,包括立体环境映射、顶点混合等。

  * DirectMusic支持DownLoadable Sound Level 2标准。

  * DirectInput支持8按键的游戏杆设备,同时支持Microsoft的力反馈摇杆。SDK库提供了读取力反馈效果文件的方法。同时提供了Force Editor程序来建立效果。

  对于VB爱好者来说,新的SDK库终于提供了完整的对VB的支持,现在终于可以使用Visual Basic来编写DirectX的程序了。

  一、DirectX SDK库的安装

  微软提供的SDK库是一个“重”达129M的dx7sdk.exe自解压缩文件,你可以上网下载或者从配套光盘上获得这个文件。双击文件就会弹出Winzip自解压缩对话框。在弹出的WinZip Self-Extract DK7SDK.EXE窗口中输入解压缩文件的路径,然后点击“Unzip”按钮解压缩SDK文件:
  要注意的是,dx7sdk.exe解压缩之后的体积有220M,硬盘比较紧张的读者在解压缩之前首先看看你的硬盘的容量是否足够。

  解压缩完毕之后,进入解压缩的目录中,双击Setup.exe文件就可以安装DirectX7.0 SDK文件了。安装是采用标准的InstallShield界面,玩Windows的读者应该对这种安装界面驾轻就熟,只要跟着安装提示一步一步地走就可以了。安装完毕之后,安装程序会在开始菜单中添加一个Microsoft DirectX 7 SDK的菜单,其中包括DirectX 7设置工具、VB范例和SDK Help等菜单项。

  现在开始进入VB,开始我们的DirectX的VB编程。在这里我们使用的是VB6企业版(英文)。Windows98中文版。

  打开VB,点击菜单中的 Project | References 项,在Object Library 列表中会有一项:DirectX 7.0 For Visual Basic Type Library 列表项,这个就是DirectX7.0 VB类库,选中该项,再选“ok”按钮,就可以将库加入工程文件中。

  二、DirectX编程初步

  1 DirectX7对象

  DirectX7对象是DirectX VB对象中其他所有对象的服务和起始对象,这个对象包含了建立诸如DirectDraw、 Direct3D、 DirectSound、 DirectInput等对象的方法。同时该对象还包含了一系列的三维控件顶点和距阵的操作函数以及一些DirectX系统函数。在VB中可以通过Dim...New来直接定义和初始化一个DirectX7对象,例如:

   Dim DirectX As New DirectX7
  当建立成功一个DirectX7对象之后,就可以使用该对象的DirectDrawCreate、Direct3DRMCreate等方法建立DirectDraw、Direct3D对象了。

  DirectX7对象范例1:获得系统中的DirectDraw和DirectSound驱动建立一个新的工程文件,点击菜单中的 Project | References 项,在Object Library 列表中选中DirectX 7.0 For Visual Basic Type Library 项后按确定按钮(以下的程序都需要这个步骤,后面将不再做说明)。然后在Form1中加入一个ListBox控件和四个CommandButton控件,在Form1的代码窗口中加入以下代码:

  Option Explicit
  
  Dim DirectX As New DirectX7
  Dim DDEnum As DirectDrawEnum
  Dim DDSound As DirectSoundEnum
  
  Private Sub Command1_Click()
   Dim Count, i As Integer
  
   Set DDEnum = DirectX.GetDDEnum
   Count = DDEnum.GetCount
   List1.Clear
   For i = 1 To Count
   List1.AddItem DDEnum.GetDescription(i)
   Next i
  
   Set DDEnum = Nothing
  End Sub
  
  Private Sub Command2_Click()
   Dim Count, i As Integer
  
   Set DDEnum = DirectX.GetDDEnum
   Count = DDEnum.GetCount
   List1.Clear
   For i = 1 To Count
   List1.AddItem DDEnum.GetName(i)
   Next i
   Set DDEnum = Nothing
  End Sub
  
  Private Sub Command3_Click()
   Dim Count, i As Integer
  
   Set DDSound = DirectX.GetDSEnum
   Count = DDSound.GetCount
   List1.Clear
   For i = 1 To Count
   List1.AddItem DDSound.GetDescription(i)
   Next i
  End Sub
  
  Private Sub Command4_Click()
   Dim Count, i As Integer
  
   Set DDSound = DirectX.GetDSEnum
   Count = DDSound.GetCount
   List1.Clear
   For i = 1 To Count
   List1.AddItem DDSound.GetName(i)
   Next i
  End Sub
  
  Private Sub Form_Load()
   Command1.Caption = “DirectDraw驱动描述”
   Command2.Caption = “DirectDraw驱动名称”
   Command3.Caption = “DirectSound驱动描述”
   Command4.Caption = “DirectSound驱动名称”
  End Sub
  
  Private Sub Form_Unload(Cancel As Integer)
   Set DirectX = Nothing
  End Sub
  运行程序,分别点击不同的按钮,在列表框中就会出现相应的设备驱动名和描述。

  2 DirectDraw7对象

  DirectDraw是一个与Windows 图形系统接口(GDI)相兼容的直接操作显示设备的软件接口。DirectDraw提供与硬件无关性的同时允许直接操作显存。程序只要使用一些基本的标准硬件约定,如:RGB及YUV色彩格式及解析度。你无须调用特殊的过程来使用显存块移动(Blitter)及调色板。使用DirectDraw,你可简单操作显存,完全使用各种硬件特性而不必理会各种不同硬件之间的差异。

  2.1 建立DirectDraw对象

  DirectDraw7对象是DirectX7中的DirectDraw对象,你需要首先建立一个DirectX7对象,然后使用该对象的DirectDrawCreate方法来建立DirectDraw7对象。例如:

   Dim DX As New DirectX7
   Dim DDraw As DirectDraw7
   Set DDraw = DX.DirectDrawCreate(“”)
  2.2 建立协作层

  当建立了一个DirectDraw对象之后,首先要设定DirectDraw的协作层。实现的方法是调用DirectDraw对象的SetCooperativeLevel函数。该函数的定义是:

   object.SetCooperativeLevel( hdl As Long, flags As CONST_DDSCLFLAGS)
  其中参数hdl指定程序的窗口句柄,参数flag决定程序运行的方式,函数调用

   DDraw.SetCooperativeLevel Me.hWnd, DDSCL_NORMAL
  将使程序运行于普通的协作层即窗口模式之下。在这种协作层你无法改变主平面调色板或进行页交换,因为程序可以使用多窗口。而函数调用

  DDraw.SetCooperativeLevel MainForm.hWnd, DDSCL_EXCLUSIVE Or _
   DDSCL_FULLSCREEN
  将使程序运行于全屏幕模式之下。在全屏幕协作模式之下你可以完全使用硬件的一切。在这个模式之下,你可以设置使用定义及动态调色板,改变显示分辨率及进行页交换。

  2.3 设置显示模式

  设置显示模式是使用SetDispalyMode函数实现的,函数的定义如下:

   object.SetDisplayMode( _
   w As Long, _
   h As Long, _
   bpp As Long, _
   ref As Long, _
   mode As CONST_DDSDMFLAGS

  其中参数w、h分别指定屏幕的宽度和高度,bpp指定屏幕显示的颜色位数,参数ref指定屏幕的刷新频率,设置为0使用显示驱动的缺省刷新频率,mode指定附加的参数。要获得系统支持的显示模式,可以使用DirectDraw对象的GetDisplayModesEnum函数来遍历所有支持的显示模式。

  2.4 建立平面对象

  一个平面或者说DirectDrawSurface对象是DirectDraw中图形显示和绘制对象。用户可以在DirectDrawSurface上贴位图、绘制图形,还可以直接操作DirectDrawSurface对象使用显存里的内容。利用DirectDraw对象的CreateSurface方法可以建立一个DirectDrawSurface7对象。例如:

  Public DDSFrontDesc As DDSURFACEDESC2
   With DDSFrontDesc
  .lFlags = DDSD_CAPS
  .ddsCaps.lCaps=DDSCAPS_PRIMARYSURFACE '
   End With
  Set DDSFront = DDraw.CreateSurface(DDSFrontDesc)

  也可以利用DirectDraw对象的CreateSurfaceFromFile函数或者CreateSurfaceFromResource函数建立一个DirectDrawSurface7对象,同时将图像文件或者资源文件中的图像装入建立的DirectDrawSurface中。如果上面的函数调用成功,函数将返回一个DirectDrawSurface对象。如果在设定DirectDraw对象的协作层时将其设置为全屏幕模式的话,为了改善图像性能,可以设立一个主平面和若干个屏下缓冲平面,首先在屏下平面中生成图像,然后将图像翻转到主平面上,这样可以有效地避免图像闪烁。

  下面通过一个具体的范例来对DirectDraw进行说明:这个范例建立一个全屏幕的DirectDraw对象,通过操作主显示平面的显示内存在屏幕上显示火焰字的特效,然后按Enter键可以将DirectDraw平面中的图形保存起来。程序的具体实现如下: 156


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台