加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用VB和TV3D从零开始轻松制作3D游戏教程 第一章 熟悉vb和tv3d

(2011-12-25 23:07:17)
标签:

vb

tv3d

3d游戏

游戏制作

教程

制作3d游戏

简单

最好的

杂谈

分类: 程序教程

前言

版权所有,转载请注明出处。

大家好,我是Reity。

这次终于开始做3d游戏的教程了。很多人都以为3d游戏的制作要比2d游戏复杂的多,其实呢,如果知道了制作方法,3d游戏反而比2d游戏的制作花费的精力少。3d本身就是一种视觉效果,即使美工很差,给人的感觉也会比2d的要优越。如果一个游戏含有很多人物动作,3d游戏只需要一个蒙皮的人物模型,然后就可以按照自己的设计拖拽出任意的动作,而2d游戏则需要把每一帧的人物造型全部画出来。比如拳皇这种格斗游戏,每个人物都需要几百张动作图呢。废话不多说了,总之,我希望通过我的教程,能够让你发现制作3d游戏原来如此简单。好了,我们开始吧。

 

第一章  熟悉vbtv3d

Vb就是Visualbasic,是一种可视化的基础编程语言。为什么用vb呢?因为它简单嘛,学得快的人几个小时就能学会。有人说我只会C++,没关系,原理都是相通的,你学vb只会更快。有人说,我不会vb怎么办?既然是从零开始的教程,我自然已经考虑到了这个问题。既然只是做游戏,又不是制作应用软件,所以我们只需要知道几个常用的命令就可以了。下面列出来就是vb在游戏制作中常用的命令,有vb基础的同学可以直接跳过这里了。

 

1、  变量:用来储存数据或文字

常用的变量类型 

Long  整数

Single 浮点,也就是有小数点的数

String 文字

实际上制作游戏只需要用到这3种类型,甚至连long都可用single代替。

 

举例:

dim aaa as single

Aaa=100

就是定义了一个名为aaa的小数变量,aaa的值为100

 

2、  条件命令

格式:

If  条件 then

结果

Else

没达到条件的结果

End if

举例:if aaa=100  then

 aaa= aaa+1

End if

当条件a=100时,运行结果aaa=aaa+1,这样aaa的值就变为101了。

3、  重复命令For next

格式:

 dim i as long

for i= 1 to 重复次数

重复内容

Next

举例:

for i=1 to 10

aaa=aaa+1

next

也就是把aaa+1重复10次,这样也就相当于是aaa+10

 

这里顺便提一个命令

格式:

Do

重复内容

Loop until 条件

这个就是无限循环了,不达到条件是不会停止的,这个游戏中只有主循环才会用一次,所以大家知道一下就可以了。

4、  随机函数 rnd*最大范围

游戏中会用到很多的随机事件,实际上,世界上根本就没有随机,我们是不知道原理或者不想去细致的讨论全部因素才会用随机来代替。比如敌方的子弹射过来,子弹的路径之所以不同,主要是由枪的后座力、稳定性,子弹的规整度,风力、空气密度,敌人的瞄准能力、反应能力、手臂肌肉强度,以及敌人在射击的一瞬间的心理活动……总之,我们不想,也没必要去考虑这些问题,所以在游戏中干脆就把敌人的命中率设为30%ok啦。

代码如下,你可以好好研究下

Dim aaa as long

Aaa=rnd*100

If aaa<=30 then

命中

Else

没命中

End if

基本就是这么几个常用的东西啦,只要熟练掌握这几个命令,简单的游戏都可以做了。不过我还是建议你能系统的自学一下vb,这样会更熟悉Vb一些。

 

我们把这几个命令用猜数字的游戏实际应用一下,这是代码,直接全部替换到vb的窗口代码中。里面有些命令我们是用不到的,所以不需要记住。“”符号后面的内容是注释,不影响代码。

 

Option Explicit '这条语句是表示所用到的变量必须先定义,建议每次开头都加上这条语句,养成好习惯。

Private Sub Form_Load()

Dim a As Long

Dim b As Long  '定义a,b两个整数型变量

Randomize Time '这个语句是让每次的随机值都不一样,如果不加,你测试的时候会发现,每次随机的值都是一样的,但是生成exe以后不会,所以只用于测试。

 

b = Int(Rnd * 99) + 1 'rnd是随机函数,游戏中非常常用,大家记住Int(Rnd * 99)这条语句是随机取09899个整数,而我们要199的数,所以后边要加1

 

Do’循环

 

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

 

If a = b Then 'a=b自然就是猜对了

MsgBox "猜对了!"

End '然后结束程序

End If

 

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

 

If a < b Then MsgBox "小了"

 

Loop

 

End Sub

 

也许有人会问了,vb不是效率很低么?不是很多人都认为vb不能制作大型游戏么?

我要说的是,直接用vb来制作游戏,确实效率很低,这本没有错。这样就必须引出vb亲密的伙伴tv3d了。Tv3d全名TrueVision3D,是美国的一款免费的商业3d游戏引擎。其实tv3d也支持c++Delphi等编程语言,只不过你学习别的编程语言至少也要1个月。Tv3d是以微软发布的dx作为底层,也就是运行效率和vb没有多少关系,vb只需要调用tv3d命令和一些表层数据的计算就可以了,其余的包括渲染,碰撞都是由tv3d完成,所以制作大型游戏完全没有问题,而且tv3d的效率还是相当高的。

Tv3d的官方网站是 http://www.truevision3d.com

6.3版本下载特点直接支持csbsp地图以及mdl骨骼动画并且附带很多基础的教程和例子
http://www.truevision3d.com/downloads/download.php?go=2&file=16&mirror=23

6.5
版本下载特点拥有更强大的特效如水面反射、动态阴影、泛光、物理引擎等。支持win7
http://www.truevision3d.com/downloads/download.php?file=28

 

我要教大家的就是6.5版本,一个更加高效率,更强大特效的版本。

之前的6.3版本使用的人已经很多了,也有很多人制作出了很棒的游戏。比如《梦幻战争》系列,这可是一个人制作的哦。

http://s11/middle/6374fbb1hb4ec156f6eca&690第一章 熟悉vb和tv3d" TITLE="用VB和TV3D从零开始轻松制作3D游戏教程 第一章 熟悉vb和tv3d" />

http://s4/middle/6374fbb1hb4ec16d207a3&690第一章 熟悉vb和tv3d" TITLE="用VB和TV3D从零开始轻松制作3D游戏教程 第一章 熟悉vb和tv3d" />

但是用6.5制作的游戏确不多见,主要原因就是因为例子和教程比较少,所以希望我的教程能够填补这一空白,使大家对6.5能有个进一步的了解。我们也来看看6.5强大的特效。

 

http://s9/middle/6374fbb1t7a58e51e6948&690第一章 熟悉vb和tv3d" TITLE="用VB和TV3D从零开始轻松制作3D游戏教程 第一章 熟悉vb和tv3d" />

http://s15/middle/6374fbb1hb4ec5511dfde&690第一章 熟悉vb和tv3d" TITLE="用VB和TV3D从零开始轻松制作3D游戏教程 第一章 熟悉vb和tv3d" />

 

好,我们下载完成后安装,然后打开vb,点上面菜单中的工程,然后点引用。注意这是很重要的一步,如图,把tv3ddll引用了,点确定,这样才能让vb能够调用tv3d

http://s2/middle/6374fbb1hb4ec1bad63c1&690第一章 熟悉vb和tv3d" TITLE="用VB和TV3D从零开始轻松制作3D游戏教程 第一章 熟悉vb和tv3d" />

像往常一样,我们先来个helloworld吧,来做我们的第一个tv3d程序。

下面是全部代码,直接复制替换即可,运行后我们会看到一个旋转的白色茶壶。看出来了么?这可是3D的哦,可不是那种不入流的2D了,我们已经步入了3D时代。

 http://s14/middle/6374fbb1hb4ec1c2a3eed&690第一章 熟悉vb和tv3d" TITLE="用VB和TV3D从零开始轻松制作3D游戏教程 第一章 熟悉vb和tv3d" />

Option Explicit

Dim Tv As New TVEngine '调用tv3d所必需的

Dim Scene As New TVScene '调用tv3d所必需的

Dim Mesh As TVMesh '定义一个网格物体

 

Private Sub Form_Load()

Me.Show '显示当前窗口,每次都加上错不了

Tv.Init3DWindowed Form1.hWnd '用窗口模式启动tv3d

 

Set Mesh = Scene.CreateMeshBuilder '网格物体初始化,必加

Mesh.CreateTeapot '建立一个茶壶

Mesh.SetPosition 0, 0, 3 '设定物体的位置坐标

 

 Do '主循环

 Tv.Clear '清屏

 Mesh.RotateY 0.001 '沿y轴以0.001每帧的速度转动

 Mesh.Render '渲染茶壶

 Tv.RenderToScreen '把所得最终结果渲染到屏幕

DoEvents '这句是把线程空出来,使其他的的程序能运行,必加

Loop

 

End Sub

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有