2024年1月1日发(作者:)

本博客所有内容均来源于

句幽博客:/post/17 。

今天为大家要讲的是VB与DirectX相结合的游戏编程,说是教程也过于夸张了,也算是本人在学习过程中的一些学校笔记和心得吧。当然 技术有限,还请大家多多包涵。

首先有人会问,为何会选择VB。好像现在许许多多的游戏都是C++编的。当然,对于专业的游戏制作来说,用C++或JAVA等语言确实是不二之选,但我们想个人开发一般的游戏来说,VB是上手很快的语言。不用可以的去理解类或者是继承和多态等等(虽然这也是VB的弱点)。我们这里选择的是VB6.0,虽然是一款年代有点久远的版本,但这丝毫不会影响我们走上游戏编程道路,同时它也是让我们以后学习其他语言的跳板。对于DirectX来说,我们选择VB所支持的DirectX8.1。虽然现在DX也更新到了11,学习太久之前的版本对我们来说并非好事。但你得相信一句话 :“DX成熟与DX8,辉煌于DX9.” 所以我们拿最经典的版本来做初步学习,在理解透彻后也可以很容易的转到更高的版本,进行更高层次的学习。

要学习本课程你先得有一定的VB编程基础。如果没有的话,你可以在网上或者购买一本VB的初级教程来看看。能够明白基本语法就好。

我想的是:每讲一个内容我都会配上一个案例源码。也更好的方便大家以及我自己及时理解这一部分知识。那好吧,废话不多说了。开始我们真正的DX之旅。

首先得知道我们游戏的画面都是一帧一帧的渲染出来的。而每一个画面都是由三角形(DX的基本单位为三角形),纹理,材质,和贴图等所契合而成。而DX所做的工作,就是去创造和调用这一切。最终渲染出在屏幕上我们看到的画面。VB要调用DX,首先得引用DX的链接库。在VB的界面点击工程-引用中选择DirectX8 for Visul Basic.

如果没有这个插件,可以在本页面最下面的附件下载。然后放在系统的system32文件夹中。在用VB 引用。

判断引用成功与否你可以在VB代码编辑窗口输入 dim dx as Dire 看后面有没有提示DirectX8一系列东西。

然后我们开始学会初始化DX。先来看看我们是怎么定义的变量:

Dim IDX As New DirectX8

Dim IDX3Device As Direct3DDevice8

Dim IDX3D As Direct3D8

一共定义了三个。这些是什么意思呢。先来看第一个,我们给了一个NEW的标志,意思就是说我们直接开始就实例化DirectX8这个类。因为DirectX8是一个总的根,所有的操作都是在它的下面进行的。所以在VB里面我们直接就现将他实例化了。而Direct3D8 好 Direct3DDevice8又是个什么东西呢? Direct3D8也就是我们平时所说的D3D,3D的编程接口。3D的一些绘图就要在这个接口中创建。然后Direct3DDevice是D3D创建的设备接头。然后用它里面的方法我们就可以初始化显示接口了。我们已一幅图来表示这三者的关系:

从中我们可以很清楚的看到 顺序依次是 DirectX8 - Direct3D -

Direct3Ddevic

当然其中还包括了其他的东西。我们在以后会用到。

理解了他们的顺序之后我们就可以开始创建一个D3device设备了。

Set IDX3D = 3DCreate 由Dx根创建D3D。

然后是创建Direct3DDevic设备。函数原型:

Device adapter, DeviceType, hWnd, CONST_D3DCREATEFLAGS,

D3DPRESENT_PARAMETERS

参数我依依说明一下,因为这个是最基础的。必须每个都要明白。

首先adapter:适配器 ,我们一般都选填D3DADAPTER_DEFAULT

DeviceType : 类型,D3DDEVTYPE_HAL(硬件抽象层,也是一般选择),D3DDEVTYPE_REF(参考设备层)

hwnd : 这个不用说了。窗体的hwnd,这里我们就一个窗口,可以直接用

flag : D3DCREATEFLAGS类型的参数,我们一般选择D3DCREATE_SOFTWARE_VERTEXPROCESSING

D3DPRESENT_PARAMETERS:最后一个,也是最重要的一个。他包含很多参数,现在我们来重点解释它

D3DPRESENT_PARAMETERS{

.AutoDepthStencilFormat

.BackBufferCount '背后缓存个数

.BackBufferFormat 后备缓冲格式

.BackBufferHeight 后备缓冲高度

.BackBufferWidth 后备缓冲宽度

.EnableAutoDepthStencil

.flags 类型标志

.FullScreen_PresentationInterval

.FullScreen_RefreshRateInHz 全屏刷新率

.hDeviceWindow null

.SwapEffect

.Windowed 窗口类型。0为全屏,1为窗口话

还有几个没有说到的参数,我们将在后面的时候解释。

如果我们要创建一个窗口化的程序,我们可以选择 定义一个变量为 D3DPRESENT_PARAMETERS类型。Dim D3DPP

as D3DPRESENT_PARAMETERS

with D3DPP

. .Windowed = 1

.BackBufferCount = 1

.SwapEffect = D3DSWAPEFFECT_FLIP

.EnableAutoDepthStencil = 1

.AutoDepthStencilFormat = D3DFMT_D16

.BackBufferFormat =

end with

好的 这样的话我们就创建了一个Device设备。不信我们可以试试,将我们的屏幕涂黑

Do While running 其中running为我们自己定义的一个布尔判断类型,用于跳出循环退出

cene

0, ByVal 0, D3DCLEAR_TARGET, 0, 0, 0

'*********以后放置渲染代码*****************

t ByVal 0, ByVal 0, 0, ByVal 0

ne

DoEvents

Loop

切记DO循环之中一定要加上Doevents 目的是让在循环的时候我们还可以操作其他事情,不然将称为死循环直接让系统崩溃、切记!

将这些整合在一个事件中试试,是否看见了黑色的屏幕。如果看到了,证明我们初始化已经成功了。D3D的创建我们也就学会了。下一节,我们将讲到顶点。它也是DX中最为重要的基础部分。

最后附上案例源码:已经VB需要引用的DX8链接库文件(解压文件后点击注册,将自动复制dll文件到system32文件

夹)

或者访问句幽博客下载: