Java3D引擎Jmonkeyengine入门
V0.1版
一.JME在Eclipse上的下载配置: 2
二.Learning jME 9
1. Hello World JME 9
一.JME在Eclipse上的下载配置:
JME(www.jmonkeyengine )是一个优秀的开源java3D游戏引擎,以下几幅图是由JME开发的游戏的截图,足以吸引你到其主页上瞧瞧吧?
想上手玩玩?好,我们一步一步来!
即然是开源的,我们要做的第一步就是下载其源码,源码中包含了jme类库的源码和step by step的代码示例。在ec通过cvs中导入jme源码,看图说话吧:
1.点File下的import:
2.选择通过CVS导入:
3.Next后,选中,如果你是第一次上dev.java的话:
4.设定登陆sun CVS的帐号:
主机当然是dev.java,Repository如你不知都有哪些项目,就写/cvs吧,这样进去后就可瞧见sun上所在的Open项目了。帐号?如你未在java上注册过,就全写guest了(我个
主觉得还要是注册下,这是个礼貌问题,毕境是用人家辛苦写出来的代码呢!)
5.再Next,嗬,原来sun上有这么多开源项目,等搞完这个再慢慢看!---列表可能有点慢,要看你的网速了,等全列完了,你就在下面选jme导出就OK!
如果你在列表中未到jme,也不要急,看到这个么?,选中,在里面输入jme后Next。
6.接下来。。。不用贴了吧,导入jme的所有源码,资源文件,例程和其所使用的Native Lib,给个最终结果的全图吧:
Src:所有的源代码
Lib: javaLib和Native Lib
7.到底有啥效果呢?忙乎了这半天?
往下看,这老外做事真是实在,一课一课的讲怎么做个游戏,就生怕我们不玩它的做品!
Jmetest包下都是一个个的测试例程,只要有main方法的你就可以运行---眼见为实嘛!
我建议你运行jmetest.flagrushtut.lesson9. Lesson9这个类,是个己经Started的赛车游戏!
首先看到的是一个对话框,设置相关参数的,直接OK吧,它总是有默认的!
黑屏…变亮……看到了吗?
如看到上图,你现在就可以使用w,s,a,d四个键控制这个小车车,用鼠标控制视角! 有点简简陋?是不到2000行代码写出的东东啊,你写2W行试试?
可能屏幕一闪而过,又恢复了原状,那就只有两个原因,一是你机器太破了,跑不起(好像有这种情况,我猜的,3D游戏嘛);另一个原因是你技术cha啦,下载的jar包和本地类库没配好。Jar包好导入,NativeLib就要右击src目录,在对话框中如下设置:
二.Learning jME
This will provide all you need to get started with jME. It assumes you have jME installed. If not, you can look to this installation guide. As a supplement to this guide, you can read the documentation at jME's documentation link, paying special attention to jME’s wiki. Finally, never be afraid to ask questions (no matter how simple) at jME’s forum. All of the code you see here is done using jME’s latest CVS version. Also, all the source code here
is in the CVS under package jmetest.TutorialGuide Please post any corrections on the jME forums, or email them to me directly.
1. Hello World JME
最简单的一个JME游戏---只是一个场景展示:使用rootNode展示一个3D Box.:在空间中展示一个3D的长方体,界面如下图:
代码简单了,先看一下我再来分析:
import com.jme.app.AbstractGame; import com.jme.app.SimpleGame; import com.jme.math.Vector3f; import com.jme.scene.shape.Box; /** * 在空间中显示一个长方体: * 1.一个简单游戏只需要继承com.jme.app.SimpleGame即可; * 2.创建一个Box对象,加入到场景中 * @author javaFound */ public class HelloWorld extends SimpleGame{ //主方法 public static void main(String[] args) { HelloWorld app=new HelloWorld(); //显示游戏配置窗口,默认为不显示 app.setDialogBehaviour(AbstractGame.ALWAYS_SHOW_PROPS_DIALOG); //启动游戏 app.start(); } protected void simpleInitGame() { //创建一个Box对象 //第一个参数是其识别名字 //第二个定义了一个Vector3f对象,表示形状在空间中的中心位置点。 //后三个参数分别定义了形状在x,y,z三轴上的拉伸,即长宽高 Box b=new Box("My box",new Vector3f(3,2,0),2,20,2); //rootNode代表场景中的根形状结点,是从父类继承而来的 //将我们自己新建的形状对像b加入到场景中 rootNode.attachChild(b); } } |
就这么短短的几行代码,看到了吗?如果还有点摸不着头脑,别急,我来说明下:
1.继承游戏基类SimpleGame:
public class简单的java游戏代码 HelloWorld extends SimpleGame |
首先,我们的类是extends com.jme.app.SimpleGame,这是JME提供一游戏引擎基类,当我们自己的类继承其后,再调用start()方法时,JME类库就自动初始化了3d游戏所需要的基础配置。在com.jme.app.*下面,其它几个类都可以用来继承生成我们的游戏,可根据我们游戏的复杂度选择。只是SimpleGame是最简单的而己。换包话说,真正的“引擎”,就是在com.jme.app.*下面。
2.3D形状的创建:
Box b=new Box("My box",new Vector3f(3,2,0),2,20,2); |
这行代码构建一个3D的立方体,构建时,通过设置Box类不同的构造参数,可以创建不同位置、大小的立方体。Box有不同的构造器参数,本例中所使用的构造器,第二个参数是
一个com.jme.math.Vector3f 对象,一个Vector3f对象通过三个float构造而成,用以代表空间中确定某个点坐标的x,y,z值。在com.jme.math.*下,提供了较常用的数学计算对象; 最后一个参数,分别代表了要创建的立方体的长、宽、高参数。
在com.jme.scene.shape.*下面,提供了非常多的3D形状类,比如Sphere等,你可根据自己的需要使用。
3.关于rootNode 对象
Box b=new Box("My box",new Vector3f(3,2,0),1,1,1); rootNode.attachChild(b); |
:rooNode是从父类继承而来的,可以理解为当前场景的根对象,后继所加入的对象,将通过rootNode引入,你可以通过rootNode向场景中加入多个形体。例如,如下代码效果:
Box b=new Box("My box",new Vector3f(3,2,0),1,10,1); rootNode.attachChild(b); Sphere b2=new Sphere("My Sphere",new Vector3f(3,2,0),4,5,6); rootNode.attachChild(b2); |
Chllenge 1:请在场景是显示一个哑铃状的物体。
2.HelloNode:
本节示例如何在场景中如何定义Node,Bounding Volumes, Sphere, Colors, Translation and Scaling。如代码示例:
public class HelloNode extends SimpleGame { public static void main(String[] args) { HelloNode app = new HelloNode(); app.setDialogBehaviour(AbstractGame.ALWAYS_SHOW_PROPS_DIALOG); app.start(); } protected void simpleInitGame() { Box b=new Box("My Box",new Vector3f(0,0,0),new Vector3f(1,1,1)); //设定一个球形边界外框 b.setModelBound(new BoundingSphere()); //调用这个方法后,以后在场景中所加入的物体在按下B时,就会显示其边界. b.updateModelBound(); //设置b在空间中的位置 b.setLocalTranslation(new Vector3f(5,2,0)); //默认的颜 b.setDefaultColor(ColorRGBA.blue); //创建一个球形 Sphere s=new Sphere("My sphere",10,10,1f); s.setModelBound(new BoundingBox()); s.updateModelBound(); // 设为随机颜 s.setRandomColors(); //构造一个用来挂接上面两个物件的子节点 Node n=new Node("My Node"); //挂接上前面创建的物件 n.attachChild(b); n.attachChild(s); //放大节点为其原始大小的5倍 n.setLocalScale(5); //移动默认场景颜,物件将会显示自己的颜 rootNode.setLightCombineMode(LightState.OFF); //挂接上子节点 rootNode.attachChild(n); } } |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论