然而开发游戏需要对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)
'好了,后备缓存已经绘制完成了,可以翻转过来了,其实写屏的方法就是不停的翻转主面和缓存面
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关文章
热点关注
- 在asp.net中为Web用户控件
- .NET3.5和VS2008中的ASP.N
- 对.NET Framework 反射的
- Asp.net Ajax 1.0 异步回
- ASP.NET2.0的控件状态和视
- 通过避免下列10个常见ASP.
- 中国地区三级联动下拉菜单
- 解析Asp.net中资源本地化
- 一个无刷新效果定时自动更
- 动态创建MSSQL数据库表存
- asp.net用url重写URLReWri
- 使用ASP.NET Atlas编写显
- 关于ASP.NET调用JavaScrip
- 使用ASP.Net Forms模式实
- asp.net ajax 使用updatep
- 优化ASP.NET应用程序性能
- ASP.NET中动态修改web.con
- ASP.NET中利用Crystal Rep
- asp.net如何生成图片验证
- 基于ASP.NET的Web动态控件
- 分享个极好的无刷新二级联
- asp.net 2.0 上传控件的使
- 创建ASP.NET监视服务器进
- Asp.net把UTF-8编码转换为
- 开发基于ASP.NET WebServi
- asp.net结合html,javascr
- asp.net 2.0下嵌套masterp
- 正则表达式提取数字
- 最新版FreeTextBox(版本3.
- 获取本机上配置好的Oracle
- ASP.Net全局变量的设置和
- VB几个有用的函数
- 用代码画折线图/柱形图/
- FCKeditor2.2 ASP.NET2.0
- 客户端回调实现gridView无
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD



