用VB和TV3D从零开始轻松制作3D游戏教程Word文档下载推荐.docx
《用VB和TV3D从零开始轻松制作3D游戏教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《用VB和TV3D从零开始轻松制作3D游戏教程Word文档下载推荐.docx(64页珍藏版)》请在冰豆网上搜索。
![用VB和TV3D从零开始轻松制作3D游戏教程Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/13/49066321-02f1-4ade-b20e-68adaa67d4ef/49066321-02f1-4ade-b20e-68adaa67d4ef1.gif)
有人说,我不会vb怎么办?
既然是从零开始的教程,我自然已经考虑到了这个问题。
既然只是做游戏,又不是制作应用软件,所以我们只需要知道几个常用的命令就可以了。
下面列出来就是vb在游戏制作中常用的命令,有vb基础的同学可以直接跳过这里了。
1、
变量:
用来储存数据或文字
常用的变量类型
Long
整数
Single
浮点,也就是有小数点的数
String
文字
实际上制作游戏只需要用到这3种类型,甚至连long都可用single代替。
举例:
dimaaaassingle
Aaa=100
就是定义了一个名为aaa的小数变量,且aaa的值为100
2、
条件命令
格式:
If
条件
then
结果
Else
没达到条件的结果
Endif
ifaaa=100
aaa=aaa+1
当条件a=100时,运行结果aaa=aaa+1,这样aaa的值就变为101了。
3、
重复命令Fornext
dimiaslong
fori=1to
重复次数
重复内容
Next
fori=1to10
aaa=aaa+1
next
也就是把aaa+1重复10次,这样也就相当于是aaa+10了
这里顺便提一个命令
Do
Loopuntil
条件
这个就是无限循环了,不达到条件是不会停止的,这个游戏中只有主循环才会用一次,所以大家知道一下就可以了。
4、
随机函数
rnd*最大范围
游戏中会用到很多的随机事件,实际上,世界上根本就没有随机,我们是不知道原理或者不想去细致的讨论全部因素才会用随机来代替。
比如敌方的子弹射过来,子弹的路径之所以不同,主要是由枪的后座力、稳定性,子弹的规整度,风力、空气密度,敌人的瞄准能力、反应能力、手臂肌肉强度,以及敌人在射击的一瞬间的心理活动……总之,我们不想,也没必要去考虑这些问题,所以在游戏中干脆就把敌人的命中率设为30%就ok啦。
代码如下,你可以好好研究下
Dimaaaaslong
Aaa=rnd*100
Ifaaa<
=30then
命中
没命中
基本就是这么几个常用的东西啦,只要熟练掌握这几个命令,简单的游戏都可以做了。
不过我还是建议你能系统的自学一下vb,这样会更熟悉Vb一些。
我们把这几个命令用猜数字的游戏实际应用一下,这是代码,直接全部替换到vb的窗口代码中。
里面有些命令我们是用不到的,所以不需要记住。
“’”符号后面的内容是注释,不影响代码。
OptionExplicit'
这条语句是表示所用到的变量必须先定义,建议每次开头都加上这条语句,养成好习惯。
PrivateSubForm_Load()
DimaAsLong
DimbAsLong
'
定义a,b两个整数型变量
RandomizeTime'
这个语句是让每次的随机值都不一样,如果不加,你测试的时候会发现,每次随机的值都是一样的,但是生成exe以后不会,所以只用于测试。
b=Int(Rnd*99)+1'
rnd是随机函数,游戏中非常常用,大家记住Int(Rnd*99)这条语句是随机取0—98共99个整数,而我们要1—99的数,所以后边要加1。
Do’循环
a=InputBox("
请猜一个数,此数为1-99之间。
"
)'
这条语句是让你输入一个数然后储存到变量a中。
Ifa=bThen'
a=b自然就是猜对了
MsgBox"
猜对了!
End'
然后结束程序
EndIf
Ifa>
bThenMsgBox"
大了"
'
if语句写在一行之内可以省去结尾的endif
Ifa<
小了"
Loop
EndSub
也许有人会问了,vb不是效率很低么?
不是很多人都认为vb不能制作大型游戏么?
我要说的是,直接用vb来制作游戏,确实效率很低,这本没有错。
这样就必须引出vb亲密的伙伴tv3d了。
Tv3d全名TrueVision3D,是美国的一款免费的商业3d游戏引擎。
其实tv3d也支持c++,Delphi等编程语言,只不过你学习别的编程语言至少也要1个月。
Tv3d是以微软发布的dx作为底层,也就是运行效率和vb没有多少关系,vb只需要调用tv3d命令和一些表层数据的计算就可以了,其余的包括渲染,碰撞都是由tv3d完成,所以制作大型游戏完全没有问题,而且tv3d的效率还是相当高的。
Tv3d的官方网站是
6.3版本下载(特点,直接支持cs的bsp地图,以及mdl骨骼动画,并且附带很多基础的教程和例子)
6.5版本下载(特点,拥有更强大的特效,如水面反射、动态阴影、泛光、物理引擎等。
支持win7)
我要教大家的就是6.5版本,一个更加高效率,更强大特效的版本。
之前的6.3版本使用的人已经很多了,也有很多人制作出了很棒的游戏。
比如《梦幻战争》系列,这可是一个人制作的哦。
但是用6.5制作的游戏确不多见,主要原因就是因为例子和教程比较少,所以希望我的教程能够填补这一空白,使大家对6.5能有个进一步的了解。
我们也来看看6.5强大的特效。
好,我们下载完成后安装,然后打开vb,点上面菜单中的工程,然后点引用。
注意这是很重要的一步,如图,把tv3d的dll引用了,点确定,这样才能让vb能够调用tv3d。
像往常一样,我们先来个helloworld吧,来做我们的第一个tv3d程序。
下面是全部代码,直接复制替换即可,运行后我们会看到一个旋转的白色茶壶。
看出来了么?
这可是3D的哦,可不是那种不入流的2D了,我们已经步入了3D时代。
OptionExplicit
DimTvAsNewTVEngine'
调用tv3d所必需的
DimSceneAsNewTVScene'
DimMeshAsTVMesh'
定义一个网格物体
Me.Show'
显示当前窗口,每次都加上错不了
Tv.Init3DWindowedForm1.hWnd'
用窗口模式启动tv3d
SetMesh=Scene.CreateMeshBuilder'
网格物体初始化,必加
Mesh.CreateTeapot'
建立一个茶壶
Mesh.SetPosition0,0,3'
设定物体的位置坐标
Do'
主循环
Tv.Clear'
清屏
Mesh.RotateY0.001'
沿y轴以0.001每帧的速度转动
Mesh.Render'
渲染茶壶
Tv.RenderToScreen'
把所得最终结果渲染到屏幕
DoEvents'
这句是把线程空出来,使其他的的程序能运行,必加
用VB和TV3D轻松制作3D游戏教程2
灯光材质贴图
(2011-12-2614:
33:
47)
第二章
在上一章里,看到的白色茶壶就是没有任何材质贴图的物体,我们要让它好看,就必须加入材质贴图和灯光。
首先加入贴图吧,就以这张名为pic.jpg贴图为例,大家可以把图片保存到程序目录并改名。
首先我们要添加一个tv3d的贴图库
DimTFAsNewTVTextureFactory'
添加一个贴图库
然后要指定图片的读取目录
Tv.SetSearchDirectoryApp.Path'
设定贴图读取目录为当前目录
把贴图读取到贴图库
TF.LoadTexture"
pic.jpg"
"
pic"
读取名为pic.jpg的贴图,并命名为pic
为了能更好的展示贴图,我们把模型换为球体,其他相关代码如下:
Mesh.CreateSphere1'
建立一个半径为1的球
Mesh.SetTextureGetTex("
赋予物体pic贴图
运行一下
这样就ok了,很简答吧,一共也就4-5行代码。
有光照效果才能更真实,我们要给它加上光照,而要让光照的效果发生作用就必须要有材质。
同理,和添加贴图一样,先添加库。
DimMFAsNewTVMaterialFactory'
添加一个材质库
DimLEAsNewTVLightEngine'
添加一个灯光库
然后设置材质,相关代码:
MF.CreateMaterial"
solid"
建立名为solid的材质
MF.SetAmbientGetMat("
),0,0,0,1
环境光
MF.SetDiffuseGetMat("
),1,1,1,1'
扩散光,即物体的固有颜色
MF.SetEmissiveGetMat("
),0,0,0,0'
自发光
MF.SetOpacityGetMat("
),1'
不透明度
MF.SetSpecularGetMat("
),1,1,1,1
高光色
MF.SetPowerGetMat("
),60
散射强度
然后把材质赋予物体
Mesh.SetMaterialGetMat("
赋予物体solid材质
这样材质就完成了
添加灯光就更简单了
灯光有三种,分别是平行光、点光源、聚光灯。
平行光就是全场景只有一个方向的光,如果我们的游戏是在室外场景,就应该采用平行光。
建立平行光:
LE.CreateDirectionalLightVector(平行光的方向向量),r,g,b,灯的名字
高光范围
其中向量不懂的话可以XX,也可以等高中学习了立体几何自然就懂了。
Rgb是灯光的红绿蓝三色的比例,可以取0-1的值。
点光源,就像我们室内的白炽灯,光线是从一个点向外扩散出去的,用在