来源:期刊VIP网所属分类:计算机应用发布时间:2014-07-14浏览:次
Java3D是由SUN公司在1998年年底正式推出的交互式三维图形应用编程接口。它的思想来源于现存的各种图形API及多种新技术,它包含了实现三维交互真实感图形的基本类和接口,用于实现三维动画的生成及多媒体程序和交互程序的编写,是Java语言在三维领域的扩展。
近几年来,3D硬件绘图技术的突破,使得实时描绘的画面越来越精致,3D游戏更多元化,更逼近真实世界,因此在游戏产业中,3D游戏已经逐渐取代2D游戏而成为游戏市场的主流,即使是网络游戏,也慢慢趋向3D化。虽然开发3D游戏存在着诸如技术更新快、程序人员与美工的配合要求高、各厂商所生产的3D硬件规格和特性不同、失败率高等问题,但不可否认,3D游戏己是大势所趋。目前Java3D在游戏开发领域已经占到了重要的地位,可应用在三维动画、三维游戏、机械CAD等多个领域,在许多情况下已成为游戏开发者的首选。Java3D也是目前在Interact上实现三维动画的主要手段之一。
Java3D是建立在Java2基础之上的,Java语言的简单性使Java3D的推广有了可能。Java3D给我们编写三维应用程序提供了一个非常完善的API,它可以帮助我们生成简单或复杂的形体。因此,利用Java3D设计一个具有互动性的坦克射击游戏,对于三维技术的探索和研究,具有实际意义。
1、Java3D介绍
利用Java3D提供的API,可以编写出基于网页的三维动画、各种计算机辅助教学软件和三维游戏等等。Java3D的这种体系结构既可以使其开发的程序“到处运行”,又使其能充分利用系统的三维特性。
Java3D的数据结构采用Scene Graphs Structure,这种灵活的树状结构与显示列表多少有些相似之处,但更具有健壮性。Java3D的场景图由Java3D在计算机上显示出三维效果,显示内存不断接受JavaSD运行的最新结果并直接显示出来,从而产生三维动画效果。
2、系统的设计与分析
2.1基本形体的生成
Java3D编程过程中,三维形体是重要的处理对象。可以用两种方式生成Java3D所需要的三维形体:一是利用Java3D提供的用于编写点、线、面的类生成点、线、面对象;二是通过调用外部其他格式的三维图形文件,生成复杂的三维形体对象。
(1)面的生成
Java3D的点、线、面时,需要给出顶点坐标数组、顶点坐标对应的颜色数组等内容。输入这些内容需要用到GeometryArray提供的多个方法,因为所有的点、线、面类都是GeometryArray的子类或孙类,因而都继承了它所有的方法。Java3D程序中的面有多个属性,可通过PolygonAttributes对象设定具体的属性。
Java3D可以通过变换生成三角形和四边形的面,Tiangle为三角形面,Quad为四边形面。
(2)形体组合编程
Java3D应用程序中,一般都拥有多个三维形体,需要对其进行合理的组合,这样才能对指定的形体进行几何变换,对指定的形体进行某种操作,生成所需要的交互式三维应用程序或三维动画。
Java3D为此提供了多个用于形体组合的对象。组合各种对象所用的是Group及其子孙类。
Java3D场景图的底部为Virtual Universe。每一个场景图只能有一个VirtuaUniverse,上面为Locale。
Group类型对象只能有一个父类,对于BranchGroup对象来说是Locale。而其他的Group类型的对象,则可以将其他Group类型的对象做为父类。如TransformGroup对象可以将Group对象做为父类,也可以将另一个TransformGroup对象做为父类。Group类型的对象可以有任意多的子类。
2.2键盘输入控制
Java通过一系列的监听器(listener)方法提供一种与用户交互的方式。向Java输入想要监听键盘输入事件的指令,Java会把键盘事件发送给监听器方法,此时,可以检查按码来判断是哪个键被按下或者释放。Java通知程序某一个按键被按下的方法是通过程序所使用的接口实现的。
KeyListener接口监听键盘事件,并且把事件发送给程序中所实现的回调方法(callback method)。这些方法叫做keyPressed、keyRelesed和keyTyped,他们都只有一个名为KeyEvent的参数。
编写一个使用KeyListener的程序时,需要使用implements关键字来修改程序的类定义:
pubHc class KeyboardTest extends Applet implementsKeyListener。
2.3实体元素的碰撞检测
本游戏中有坦克与坦克之间的碰撞检测,坦克与障碍物之间的碰撞检测,炮弹与坦克之间的碰撞检测,炮弹与障碍物之间的碰撞检测。
当坦克碰到障碍物或其他坦克时将不能再继续往前移动;当炮弹打中障碍物时炮弹爆炸,障碍物不损;当主体坦克炮弹打中敌对坦克时,敌对坦克爆炸且ENEMY数量减少1格;当敌对坦克炮弹打中主体坦克时,主体坦克ENERGY减少1格。
当主体坦克发出子弹打中敌对坦克或障碍物,发生碰撞冲突时,播放声音效果co1lide.au。其主要代码为:
fCollldeSnd=getAudioClip(getCodeBase(),〝collide.au〞):
若打中的是敌对坦克,敌对坦克发生爆炸,还会播放声音效果explode.au。其主要代码为:
fExplodeSnd=getAudioClip(getCodeBase(),〝explode.au〞):
当主体坦克与敌对坦克或障碍物发生碰撞冲突时,播放声音效果veollide.au。其主要代码为:
fViewerCollisionSnd=getAudioClip(getCodeBase(),〝vcollide.au〞):
3、结束语
本文结合了Java3D的特点,利用Java3D设计了一个坦克射击游戏,对Java3D的系统结构和开发本游戏所涉及到的关键技术作了详细的介绍,确定了游戏需要实现的总体功能,论述了实现方法。该游戏的设计方案可供3D游戏的开发者参考。
期刊VIP网,您身边的高端学术顾问
文章名称: Java3D的坦克游戏设计策略
文章地址: http://www.qikanvip.com/jisuanjiyingyong/14289.html