用VB.NET实现你的游戏梦想

2008-04-09 04:43:52来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  游戏开发是许多程序员的梦想,看着游戏中那华丽的画面。有多少人会感叹,如果自己能做就好了。

  然而开发游戏需要对DirectX的调用,原来除了C 没有其他语言可以胜任这份工作,虽然DirectX7.0SDK加入了对VB的支持,但是VB毕竟能力有限,无法胜任这份严峻的工作,游戏可以说是最吃资源的程序,VB的速度无法完成。即使做出个游戏也被人说做不入流。这样一来VB程序员无法实现自己的梦想了。

  .net推出了,VB.net的性能已经可以和VC 媲美,用微软的说法内核是一样的,只不过是语法的差异。VB程序员大喜,这样再也不会被C 程序员说成是傻瓜程序员了,你们能做的我们一样可以。

  好了现在切入正题,现在我们来做一个简单的游戏。

  首先先要对游戏有个整体构架才行,VB.net中对类的设定比较可爱,功能也非常强大,不用一用起不太对不起微软了。

  调用DirectX,首先先要安装DirectX7.0以上版本的SDK开发包,然后新建一个项目,选择Windwos应用程序。

  然后选择引用DirectX方法是,选择引用->COM->DirectX7 for VisualBasic Type Library

  好了,至此你已经引用了DirectX7.0

  首先为了方便使用我们调用DirectX7.0,所以我们声明

Imports DxVBLib
  然后我们定义一个DirectX7.0的对象

Public DirectX As New DirectX7
  声明一个DirectDraw对象,用于2D游戏的绘图

Public DDraw As DirectDraw7

DDraw = DirectX.DirectDrawCreate("")
  然后要设置DirectDraw的协作层

Call DDraw.SetCooperativeLevel(Me.Handle.ToInt32, CONST_DDSCLFLAGS.DDSCL_FULLSCREEN Or CONST_DDSCLFLAGS.DDSCL_ALLOWMODEX Or CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE)
  其中用到的常数有

CONST_DDSCLFLAGS.DDSCL_FULLSCREEN表示全屏模式

CONST_DDSCLFLAGS.DDSCL_ALLOWMODEX表示允许使用ModeX

CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE表示独占模式
  在DirectX的编程中会用到大量的常数,这里教你一个技巧,在使用的地方打空格,VB.net会列出可以使用的所有常数,非常好用。

  然后设置DirectDraw得显示模式

Call DDraw.SetDisplayMode(800, 600, 16, 0, CONST_DDSDMFLAGS.DDSDM_DEFAULT)
  800,600表示屏幕尺寸,16表示16位真彩

  然后定义缓存用于存储图片

Dim ddsPrimary As DirectDrawSurface7 '设置主面

Dim ddsBackBuffer As DirectDrawSurface7 '设置缓冲面

Public ddsMap As DirectDrawSurface7'设置地图

Public ddsHero As DirectDrawSurface7'设置人物

'定义设置表面

Dim ddsd As DDSURFACEDESC2 '表面

'为屏幕建立一个后备缓冲区

ddsd1.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS Or CONST_DDSURFACEDESCFLAGS.DDSD_BACKBUFFERCOUNT

ddsd1.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE Or CONST_DDSURFACECAPSFLAGS.DDSCAPS_FLIP Or CONST_DDSURFACECAPSFLAGS.DDSCAPS_COMPLEX

ddsd1.lBackBufferCount = 1

ddsPrimary = DDraw.CreateSurface(ddsd1)

'设置后备缓冲区

Dim caps As DDSCAPS2

caps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_BACKBUFFER

ddsBackBuffer = ddsPrimary.GetAttachedSurface(caps)

ddsBackBuffer.GetSurfaceDesc(ddsd4)

'载入画面初始化

ddsd2.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS Or CONST_DDSURFACEDESCFLAGS.DDSD_HEIGHT Or CONST_DDSURFACEDESCFLAGS.DDSD_WIDTH

ddsd2.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_OFFSCREENPLAIN

ddsd2.lWidth = ddsd4.lWidth

ddsd2.lHeight = ddsd4.lHeight

'读取地图

ddsMap = DDraw.CreateSurfaceFromFile("Map\001.bmp", ddsd2)

'载入精灵

ddsd3.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS

ddsd3.lHeight = CONST_DDSURFACEDESCFLAGS.DDSD_ALL

ddsd3.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_OFFSCREENPLAIN

'读取人物

ddsHero = DDraw.CreateSurfaceFromFile("BMP\H00.bmp", ddsd3)

'把人物从背景中抠出来,用Key设置背景色

Dim key As DDCOLORKEY

'这里的背景色为黑色

key.low = 0

key.high = 0

ddsHero.SetColorKey(CONST_DDCKEYFLAGS.DDCKEY_SRCBLT, key)

'在后备缓存中绘制地图

Dim rMap As RECT

ddsBackBuffer.BltFast(0, 0, Map.ddsMap, rMap, CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT)

'在后备缓存中绘制人物

Dim rPlayer As RECT

Dim ddrval As Boolean

'rPlayer表示从图片中截取那块,从哪到哪。如果你打开很多游戏的位图看看的话你会发现一个人物的多种动态往往放在一张位图中,截取其中的不同块显示出来就形成了动画。

'表示从(0,0)这个位置开始取

rPlayer.Top = 0

rPlayer.Left = 0

'表示取到(32,32)这个位置

rPlayer.Right = 32

rPlayer.Bottom = 32

'其中0,0表示绘制的位置。

ddrval = ddsBackBuffer.BltFast(0, 0, ddsHero, rPlayer, CONST_DDBLTFASTFLAGS.DDBLTFAST_SRCCOLORKEY Or CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT)

'好了,后备缓存已经绘制完成了,可以翻转过来了,其实写屏的方法就是不停的翻转主面和缓存面

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用FileStreams将DTD插入XML中

下一篇:VB6将XML数据传入TreeView控件