vb



SOpenbox.Play DSBPLAY_DEFAULT '播放声音

 

Dim Mode1 As D3DDISPLAYMODE
Dim Dpp1 As D3DPRESENT_PARAMETERS
D3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, Mode1 '这里是直接获得屏幕的分辨率等信息,这里有些不太一样
Dpp1.Windowed = 1
Dpp1.SwapEffect = D3DSWAPEFFECT_DISCARD
Dpp1.BackBufferFormat = Mode1.Format
Dpp1.BackBufferCount = 1
Dpp1.AutoDepthStencilFormat = D3DFMT_D16
Dpp1.EnableAutoDepthStencil = 1
Dpp1.hDeviceWindow = Me.hWnd


关于这方面的教程比拟少,如果你很想做自己的游戏,但你有甚么都不会做,不知从何下手。那么请你往下看吧,我就是要告诉你们一种很是简单的游戏制作方法,从零最先。我记得我当时下载了许多代码,坐在电脑前边吃鸡翅边研究代码,(话说回来,初期研究代码就应该有这种从容的精神)一个下昼,我就可以作出一个很是简单的游戏了,当然是那种拿不出手的,不过总算是做出来了一个啊。我应该可以讲解的很具体,当然你们如果看过了借是不懂可以直接问我或是咨询网上的朋友们。当然,独立思考和自我谙练是最重要的,就像学吉他,先生甚么都教了,剩下的就得自己练了,不练=白学。


事先声明


作者水平有限,如果有错误请及时斧正。本教程只研究游戏制作,不研究vb的其他功能。本教程面向想要轻松做自己的游戏的有志人群,已经做过游戏的和使用其他游戏制作软件的朋友可不参考本教程。转载本教程请注明来历。

 

 


第一章 熟习VB

 


一进去让你新建工程,甚么都不用管,按回车就行。

 

进入后,如图所示。这就是你的舞台了。


你现在点上面的运行,就是那个三角号,就会出现一个窗口。看吧,你甚么都没干,就已经设计出来了一个Windows窗口了,看出vb的强大了吧。

 

MsgBox "我的第一个作品!"

 

 

 

 


你现在可以随便试试各种功能,尽快熟习它,不用害怕,不会损伤到机器的,你现在就是需要大胆的尝试,争取了解个大概。我当时是花了20分钟。vb大部分东西见名就知道用途,遇到不懂得单词,电脑里配个词典查一下就懂了。实在看不懂意思的,比如外接程序,先放一放,不管它。

 

当然,最好的办法是去找本教vb的书,或是到网上查一查vb的教程。

 

 

 

接下来我们要熟习的是代码区,编程软件的精髓就在这里,甚至可以不用任何控件,只插入代码就可以完成编程。(搞过网页设计的朋友可以或许会理解得更深)

 

双击窗口的灰色部分就可以进入代码区了。(基本操作请大家自己多多尝试,这里就不多说了)

 

首先看到的是:

Dim Dpp1 As D3DPRESENT_PARAMETERS
Dpp1.SwapEffect = D3DSWAPEFFECT_FLIP

Private Sub Form_Load()

 

 

 

 


End Sub

 

这是一个完整的“过程”(所谓“过程”,就是一段小程序),这个过程开启程序后会第一个运行。(Form_Load,顾名思义,程序读取时分运行)

 

每种课本都有hello world,让初学者引以为自豪,我们也来一个吧,体验一下编程的轻松。

 

我们在这两行代码中减一点东西。(如果娴输入麻烦,可以直接复制过去笼罩掉)

 

变成:

AAA: '这是放了一个标签,和后面的goto连用

 

 

Private Sub Form_Load()

 

点旁边实心的方框,这个是中止程序运行,以后你就会用这两个按钮进行调试。

 

第三章 DX8与VB联合

 

Private Sub Form_Load()
Me.Show
Set DX = New DirectX8
Set D3D = DX.Direct3DCreate '和前面差不多

Randomize Time '这个语句是让每次的随机值都不一样,如果不减,你测试的时分会发现,每次随机的值都是一样的。

运行一下吧,会出现一个消息窗口。

 

MsgBox "格局化最先......"

注意:

 

If DIState.Key(DIK_LEFT) Then Tran.X = Tran.X - 1

Private Sub Form_Load()

 

MsgBox "发现木马程序启动!"

 

''''''''''''''''''''''''''''''''获取键盘信息
DIDEV.GetDeviceStateKeyboard DIState '得有这句

 

下面我们扩展一下,做一个整人程序。

 

MsgBox "100%......"

 

MsgBox "50%......"

 

MsgBox "10%......"

 

MsgBox "哈哈,开个玩笑,别害怕。"

 

 

 

End 'end是结束程序的代码

 

Dpp1.BackBufferWidth = 800 '这两句可以改分辨率,但必定要是存在的分辨率比如640*480、800*600、1024*768
Dpp1.BackBufferHeight = 600


End Sub

 

 

 

首先要定义些变量:

 

下面我们熟习一下,条件语句If then 的应用。

 


从2005年起,接触vb能有两年了吧,虽然也没做出甚么像样的作品,不过上了大学以后实在没有心思去研究游戏制作了。回想当年,抱着对游戏制作那么大的热情,发疯了一样在网上搜索资源,现在要都甩掉了,借真不是滋味。不过人人世借有很多事情要去尝试,我借不能原地踏步,去寻找新的兴趣才是我的个性。(现在我的兴趣是乐器,我爱好实在太多了)但愿借能有你们将业余游戏事业发扬光大。不过请你们定心,我借会继续密切的关注着你们的进展,支持你们的。人最根本的就是记忆,而这段记忆是抹不去的。

If DIState.Key(DIK_RIGHT) Then Tran.X = Tran.X + 1 '接收到右方向键,向右移动。下同。

 

 

If a <= 0 Or a > 99 Then
MsgBox "不许胡闹!"
End
End If
'If语句的结构
'If 条件 Then
'结果
'End If
'上边翻译一下就是,如果a<=0 或者 a>99两者之一成立,那么运行msgbox,提示"不许胡闹!",然后结束程序。
'条件语句就这么简单。
'这段主要的意思是防止他人输入不是1-99的数,假如他人不按划定规则玩游戏,那么我们就要限制他一下,就是这个功能。


If a = b Then 'a=b自然就是猜对了,然后结束程序
MsgBox "猜对了!"
End
End If

 

If a < b Then MsgBox "小了"

GoTo AAA 'goto 这条语句就是回到上边的AAA的地方最先履行程序,因为没有猜对,所以循环一下,让你继续猜。

End Sub

 

 

借算挺简单吧,如果读起来吃力的话就静下心来慢慢研究,或者尝试更改个此外语句,这样能减深理解。以上内容都是游戏中最常用到的语句,所以必定要熟习它。

 

好了以上算是先开开胃,本章到此结束,好好熟习一下吧,做个小游戏就是这么简单。

 

 

 

 

 

Scal.X = 2 '原图片的缩放比例,自己修改数值看效果
Scal.y = 2

 


第二章 控件游戏

 

其实VB确切有很多不错的控件,做些小程序绰绰有余。不过控件的利用率很低,所以我一直主张用dx,不过如果你对自己的游戏要求不高的话,完全可以尝试用控件来完成。那么现在介绍一下几个有用的控件。

 

nColorKey = D3DColorRGBA(255, 0, 255, 255)
'ncolorkey为图片的底色,下面的程序读取图片时会自动去除底色,形成镂空的图案。当前图片you.bmp的底色就是现在的这个数据。
'D3DColorRGBA(255,255, 255, 255),这个函数的四个数字分别表示红绿兰和半透明度,可根据自己的意愿进行修改

 

PictureBox:主要用来存放图片,在它的属性中,找Picture项,点击后面的三个点的按钮,就可以载入你选择的图片了。自己研究一下各个属性项的意思吧。Image和它差不多。

 

TextBox:主要用来存放文字,你可以用它来输入输出文字。Label和它差不多。

 

Timer:就是那个钟表图标的,这是个很是有用的控件。是个定时器,他有这么几个属性。

 

Enable:是否有效,无效的情况下是不会计时的。

 

非诚勿扰Sprite.Draw Tex, Rect1, Scal, Center, Rotation, Tran, Color '好,最先贴图啦!

D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
Sprite.End
D3DDevice.EndScene
'这三句和上边的两句对应,位置也不要变。

 

 


Option Explicit '这条语句是表示所用到的变量必须先定义,建议每次开头都减上这条语句,养成好习惯。
Private Sub Form_Load()
Dim a As Integer, b As Integer '定义a,b两个整型变量,变量类型主要用到的有string(字符串),single(实数型),integer(整型),boolean(逻辑判定,只有true和false两个值)。

Set D3DDevice = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Me.hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, Dpp1)

 

 


初始化:

 

 

 


首先必须点击上面的工程,选引用,然后在其中找到DirectX 8 for Visual Basic Type Library,在前面打勾,这样才能使用dx8。

End Sub

 

 


到这里才是重点,然而即使是重点你也会发现很是简单,前边其实完全可以不看,好了不多说了,我们最先探索dx8的强大吧。

 

dx的启动:

'定义所贴图的原大小
Rect1.Left = 50
Rect1.Right = 100
Rect1.Top = 50
Rect1.bottom = 100
'dx8中,可以把本来的图片分成各个小块来贴图,上面四句表示的位置是,从坐标(50.50)到坐标(100,100)的区域

dx的启动分为两种,一种是全屏模式,另一种是窗口模式。但是全屏模式比拟霸道,所以我推荐使用窗口模式,而且这样更符合windows。

 

 

 

 

全屏模式:如果你见到黑屏了,就是成功了。

 

Option Explicit
Dim DX As DirectX8
Dim D3D As Direct3D8
Dim D3DDevice As Direct3DDevice8
Dim d3dx As D3DX8
Dim Sprite As D3DXSprite
'以上都是dx8会用到的东西,每次都减上就是了
Dim Running As Boolean '这个是运行形态,当为false的时分就会退出

Private Sub Form_Load()
Running = True '程序形态为运行
Me.Show
Me.ScaleMode = vbPixels
Me.Move 0, 0, Screen.Width, Screen.Height '让窗口笼罩全屏
Me.Refresh

 

 

 

Dpp1.BackBufferFormat = D3DFMT_R5G6B5 '这里是颜色显示模式,可不更改

Set D3DDevice = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Me.hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, Dpp1) '完成dx8的全屏显示
Set d3dx = New D3DX8
Set Sprite = d3dx.CreateSprite(D3DDevice)

Do While Running = True '当Running = True时,运行到loop处后,返回到这里,也就是一个循环
D3DDevice.BeginScene
Sprite.Begin
'这两句的位置不要变

D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 0, 0 '清屏,也就是把屏幕涂黑

D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
Sprite.End
D3DDevice.EndScene
'这三句和上边的两句对应,位置也不要变。

DoEvents '让系统可以或许处理其他信息,否则就是死循环
Loop


Unload Me '当Running = False时退出

End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) '当点击鼠标时
Running = False
End Sub

 


窗口模式:运行后看到一个黑色的窗口

 

左边那个条中的按钮就是控件,点击然后在窗口上拖放就行了。

 

Option Explicit
Dim DX As DirectX8
Dim D3D As Direct3D8
Dim D3DDevice As Direct3DDevice8
Dim d3dx As D3DX8
Dim Sprite As D3DXSprite
'以上都是dx8会用到的东西,每次都减上就是了

 


不多说了,以上不过是我的一点心情,这篇教程只不过是我这两年的一点探索结果,写这篇教程就是希望拥有和我当年一样热情的、对游戏制作有浓厚兴趣的而又对游戏制作不太了解的朋友可以或许通过这篇教程鼓起勇气,做出属于自己的游戏。

 

Set d3dx = New D3DX8
Set Sprite = d3dx.CreateSprite(D3DDevice)
Do
D3DDevice.BeginScene
Sprite.Begin
'这两句的位置不要变

 

 

 


因为这里不是重点,就不多说了。不过在对游戏效果要求不高的情况下,控件游戏也是个不过的选择。

DoEvents '让系统可以或许处理其他信息,否则就是死循环
Loop
End Sub

Private Sub Form_Unload(Cancel As Integer) '关闭窗口直接退出
End
End Sub

a = InputBox("请猜一个数,此数为1-99之间。") '这条语句是让你输入一个数然后储存到变量a中。


 

D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 0, 0 '清屏,也就是把屏幕涂黑

dx的贴图:以下内容全以窗口模式为尺度

 

If a > b Then MsgBox "大了" 'if语句写在一行之内可以省去结尾的end if

 

符号“'”后面绿色的内容是注释,不会影响程序的运行,只是做说明注解或做个标记用。

'最先启动dx8
Set DX = New DirectX8
Set D3D = DX.Direct3DCreate

Dim Tex As Direct3DTexture8 '用来存放图片
Dim nColorKey As Long '图片的背景色
Dim Rect1 As RECT '截取的图片的区域
Dim Scal As D3DVECTOR2 '缩放图片的比例
Dim Rotation As Single '旋转的角度,弧度制
Dim Center As D3DVECTOR2 '图片的中心轴位置
Dim Tran As D3DVECTOR2 '贴图的位置
Dim Color As Long '贴图的颜色,可实现变色和半透明的效果

 

然后读取图片

 

 

Set Tex = d3dx.CreateTextureFromFileEx(D3DDevice, App.Path & "\you.bmp", D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DUSAGE_RENDERTARGET, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_FILTER_NONE, D3DX_FILTER_NONE, nColorKey, ByVal 0, ByVal 0)
'这条就是读取图片的语句了,可自己修改读取位置。
'一般除了App.Path & "\you.bmp"和nColorKey之外,都不要轻易修改。

说这么多用处也不大,就是先让你们了解个大概,下面的是全部功能的源代码,建议,你也放松一下心情后,或者找点吃的东西,慢慢的品读它吧。只要你研究透了这些代码,那么做出来一个游戏不会很难了。

 

 

然后就可以最先贴图了

MsgBox "格局化已完成。"

Center.X = 25 '设置图片的转动轴坐标
Center.y = 25

Rotation = 1 '设置旋转角度,修改数值看效果

Color = D3DColorRGBA(255, 255, 255, 200) '上面说明注解过了,修改各项数值看效果

 

 


就这么简单,看起来好像挺多的变量,其实很多都可以用0代替。

 

 

 

Interval:每次的间隔时候,单位毫秒。计时器运行的时分每隔Interval毫秒就会履行一次它的代码,所以可以用timer完成动画。

 

dx的键盘控制

 

 

 

定义变量

 

'键盘检测
Dim DI As DirectInput8
Dim DIDEV As DirectInputDevice8
Dim DIState As DIKEYBOARDSTATE

 

 

 

''''''''''''''''''''''''''' 启动Direct Input,用于检测键盘 ''''''''''''''''''''''''''''''
Set DI = DX.DirectInputCreate()
Set DIDEV = DI.CreateDevice("GUID_SysKeyboard")
DIDEV.SetCommonDataFormat DIFORMAT_KEYBOARD
DIDEV.SetCooperativeLevel Me.hWnd, DISCL_BACKGROUND Or DISCL_NONEXCLUSIVE
DIDEV.Acquire

 


监测键盘:

 

MsgBox "木马无法删除,您的硬盘将被格局化!"

定义变量

 

Set Mtitle = DML.LoadSegment(App.Path & "\title.mid") '读取音乐文件
Mtitle.SetRepeats -1 '音乐设为循环,数值为播放次数,-1即为无限
DMP.PlaySegmentEx Mtitle, DMUS_SEGF_DEFAULT, 0 '最先播放音乐

If DIState.Key(DIK_DOWN) Then Tran.y = Tran.y + 1

 


播放音乐和声音:

 

 


如果你借没有用过vb,那借是先来熟习一下它吧。

b = Int(Rnd * 99) + 1 'rnd是随机函数,游戏中很是常用,大家记住Int(Rnd * 99)这条语句是随机取0—98共99个数,而我们要1—99的数,所以后边要减1。

 

'DirectSound
Dim DS As DirectSound8
Dim SOpenbox As DirectSoundSecondaryBuffer8 '储存openbox这个声音
'DirectMusic
Dim DMP As DirectMusicPerformance8
Dim DML As DirectMusicLoader8
Public Mtitle As DirectMusicSegment8 '储存title.mid文件

 


初始化:

 

'''''''''''''''''''''''''''启动direct sound and music,用于播放声音,,,,,,,,
Set DS = DX.DirectSoundCreate("")
DS.SetCooperativeLevel Me.hWnd, DSSCL_NORMAL
Dim DSBDesc As DSBUFFERDESC
DSBDesc.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME
'''''''''''''''''''''''''''''''''''''''用于播放.mid文件
Set DML = DX.DirectMusicLoaderCreate
Set DMP = DX.DirectMusicPerformanceCreate
Dim dma As DMUS_AUDIOPARAMS
DMP.InitAudio Me.hWnd, DMUS_AUDIOF_ALL, dma, Nothing, DMUS_APATH_DYNAMIC_STEREO, 128
DMP.SetMasterAutoDownload True

 


播放

 

Set SOpenbox = DS.CreateSoundBufferFromFile(App.Path & "\Openbox.wav", DSBDesc) '读取声音文件

If DIState.Key(DIK_UP) Then Tran.y = Tran.y - 1

 

作者reity
这是转载的!
如果鞭挞打击了你的权利请马上联系办理员!我会马上删除该教程的!
======================================================================
写在前面的话

 

 

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值