我通过学习创建简单的例子(他们带有很多很有帮助的解释_第1页
我通过学习创建简单的例子(他们带有很多很有帮助的解释_第2页
我通过学习创建简单的例子(他们带有很多很有帮助的解释_第3页
我通过学习创建简单的例子(他们带有很多很有帮助的解释_第4页
我通过学习创建简单的例子(他们带有很多很有帮助的解释_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1. BLITZ3D 介绍我通过学习创建简单的例子(他们带有很多很有帮助的解释注释)来学习Blitz3D, 3D教程, 命令索引,尤其是官方的Blitz3D 经验, 例如,代码管理和工具箱 ! 所以,对于初学者这些是最简单的学习方法。这本手册中有大量令人兴奋的例子,和对问题通俗的解释,并只在确实需要的时候才介绍新的命令。 这就是为什么我在这向您重新推荐这本书。 那么,让我们开始编写一个真正的3D游戏吧! 哪个方向朝上?!不像2D游戏的标准XY坐标系是以屏幕的左上角(0,0)为起点的 ,3D游戏的世界坐标坐标系XYZ在屏幕的中间。 Z-方向指向向前(+)和向后 (-)。 只有当 Z坐标是标准的垂

2、直向上和向下的时候才会和2D代码混淆。 当你在你的3D空间中放置并移动一个对象的时候你就会发现XYZ坐标的关系, 但是你一旦开始移动一个摄像机,那你将很快迷失方向。在3D空间中放置一个对象不仅仅是x,y,z 坐标,还有很多东西的。你也可以让任何对象 (甚至包括摄像机!) 沿着他们各自的X, Y,Z 坐标轴旋转。 沿着X坐标旋转叫倾斜(PITCH), Y坐标叫偏移(YAW), Z 坐标叫滚动(ROLL), 就像你是一架飞机一样。 这些旋转是按角度数来计算的(0-360)。 但是你不必担心你会忘记旋转的度数,因为一旦你运行你的游戏,你就会发现错误的旋转角度,然后你就可以修改代码,重试,直到正确为止

3、。让我们开始吧! - - - 游戏骨架下面的代码描述了一个3D游戏的主要框架。 黄色部分是注释 (以分号开始的) ,提供了附加的解释和被Blitz忽略的内容。 注释你的代码是一个专业的习惯,这将为你在失败的道路上节省很多时间。 如果你删除了所有的注释,那么你将会发现,有时候为了知道一小段代码是干什么的,你也要让一个简单的3D游戏运行起来!打开 lesson1.bb,按这个火箭图标运行这个程序然后你将看见这个这里就是代码! lesson1.bb; 将来在这里插入代码!例如:常量,变量,函数; Escape键的扫描码是1; 常用数值"全局化"是很好的选择Global escap

4、e_key = 1Global screen_width = 640, screen_height = 480;设置显示模式 Graphics3D screen_width, screen_height, 16, 2SetBuffer BackBuffer(); 设置摄像机 cam1 = CreateCamera()CameraViewport cam1, 0, 0, screen_width, screen_height; 加载关卡对象, 例如、树、火箭、 敌人、灯光等等light1 = CreateLight( 2 ) ; 2 = 点光源类型cube1 = CreateCube()Posi

5、tionEntity cube1 ,-2,-2,10; 在你没有按ESCape键的情况下游戏主循环将不断重复 While Not KeyHit( escape_key )      键盘和鼠标控制放在这里      这里放置3个对象的改变,例如,移动/动画对象,射击,检测碰撞     UpdateWorld      RenderWorld     

6、; 2D 元素,更新HUD,文本,信息     Text 50,50,"Hello Cube!"     FlipWendEnd; 以后重复使用的函数将出现在这新的命令Global escape_key = 1Global screen_width = 640,screen_height = 480Graphics3D screen_width,screen_height,16,2ESCape键的扫描码是1 ,所以我们用"escape_key"这个有意义的

7、名字创建一个全局变量,并在其中存放这个数值。 Graphics3D screen_width,screen_height,16,2设置3D图形卡,这样就得到一个尺寸是640 x 480像素的游戏屏幕,使用16 位颜色深度并带有窗体 (1=全屏, 2=窗口)。 你将发现如果使用全屏,将加速你的游戏运行。 实验!把escape_key = 1改成escape_key = 28 现在你就可以按 ENTER(回车)键来停止你的程序了! 把Global screen_width = 640, screen_height = 480改成Global screen_width = 320, screen_h

8、eight = 240 看看有什么不一样了? 把Graphics3D screen_width, screen_height, 16, 2改成Graphics3D screen_width, screen_height, 16, 1 这次是时候全屏了!撤销你的修改 SetBuffer BackBuffer() 使用FLIP听起来相当令人讨厌? SetBuffer BackBuffer()其实是一个在动画中使用的技术,就是当前面的页面被显示出来的时候就把你一面要显示的世界对象画到一个背面隐藏页面中去(就是大家都知道的缓存)。一旦3D对象被移动并画到隐藏缓存区域,只要使用FLIP 命令把BackB

9、uffer(后缓存)换到 FrontBuffer(前缓存)。 这样作就解决了一个众所周知的屏幕闪烁和创建平滑动画的恼人问题。light1 = CreateLight( 2 ) cam1 = CreateCamera()CameraViewport cam1, 0, 0, screen_width, screen_heightlight1 = CreateLight( 2 ) 创建一个标准的点光源名叫 light1 (1 = 方向光(默认) , 2 = 点光, 3 = 聚光灯 ) 。cam1 = CreateCamera() 创建一个摄像机名叫 cam1。你可以通过键盘和鼠标控制你的摄像机点(今

10、后实现)。 你甚至可以绑定摄像机到其他对象(叫“父子关系”)来创建一个第一或第三人称视角。CameraViewport cam1,0,0,screen_width,screen_height 设置屏幕中将要显示的部分,就是cam1 "所看见的东西" (就是在它前面放置什么),那么在这个盒子里就是游戏的整个屏幕了。你可以创建多个摄像机来实现分屏,后视镜等特效。 cube1=CreateCube()PositionEntity cube1,-2,-2,10 cube=CreateCube()在你的世界中心点( 0,0,0),对角从(-1,-1,-1) 到(+1,+1,+1)简单

11、地创建一个立方体。 完全可以对这个基础形状进行缩放,定位,旋转,上色,贴图和透明等修改来让它适合一个世界中的建筑物的需求。 例如。 EntityColor cube1, 255,0,0 将把立方体改成红色。 你还可以创建平面,球体,圆柱体,圆锥体这些基础图形。 如果你想要一个更高分段数的(光滑的)形状,你也可以在圆括弧中增加数字16或32,例如, CreateSphere(16)。实验 !在 cube1=CreateCube() 后增加texture1 = LoadTexture("water.jpg")EntityTexture cube1,texture1酷啊?! 尝试

12、在这个文件夹中增加你自己的256 x 256的图形并把它应用到一个对象上! 在PositionEntity cube1,-2,-2,10后增加cone1=CreateCone()PositionEntity cone1,4,-2,10尝试 CreateSphere(),CreatePlane(),CreateCylinder()函数 在PositionEntity cone1, 4,-2,10后增加EntityColor cone1,255,0,0 EntityAlpha cone1,0.2RotateEntity cone1,0,0,90ScaleEntity cone1,0.5,2,0.5

13、 现在发生了什么?! 圆锥变成了红色,透明,旋转,并且变长变瘦了! 绝大多数绘图程序将会给你3个"RGB"数字来实现你喜欢的任何颜色!Alpha "透明"能够在 0 (不可见)和1 (实体,完全可见)之间变化 在任何X,Y,Z 坐标上旋转能够在0到360度之间变化缩放范围从001到1000+ While Not KeyHit( escape_key ) , 用Wend来控制首先我们的主游戏循环检测Escape键 (扫描码 = 1)是否被按下KeyHIT()。 如果被按下了,游戏跳出循环并结束。在这里检测活动扫描码 。 检测用户增加的键盘输入和鼠标输入,给

14、每个对象一点时间来移动一点 (玩家, 敌人, 飞行的炮弹) , 检测碰撞, 更新信息,并显示HUD GUI (显示图形用户界面) 例如,分数、生命值、法力值、能量值、雷达图等等。 首先3D对象必须被修改,然后任何最后被画上去的2D元素将覆盖在先前被画在顶部的图像。用Wend来指明While循环的结束。   更新世界  渲染世界更新世界 更新那些我们将会事先移动,缩放,旋转或者其他操作的对象。和我们将在后面设置的一些碰撞。 渲染世界 生动的渲染对象/场景到BackBuffer() (隐藏页) 等待FLIP命令真实地把隐藏页的内容显示到屏幕上。  Text 50,50,"Hello Cube"  FlipWendEnd在渲染世界后我们现在可以放置我们的2D元素了,例如,分数、生命、法力值、 能量值、雷达图等等。 Text 50,50,"Hello Cube" 放置文字 "Hello Cube"在以左上角为起点测量的游戏屏幕的 X,Y坐标(50,50)。文字/精灵

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论