JME 3 入门教程1 - Hello SimpleApplication

原文链接http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_simpleapplication

前一节:安装JME3,下一节:Hello Node

这一节教程假定你已经下载了jMonkey Engine3,并在自选的IDE中设置妥当,且能够运行其中的样例。

准备完毕,马上就要创建属于你的第一个jMonkey Engine3游戏了!你可以在jMonkeyPlatform,NetBeans,Eclipse等任何一种IDE中学习这一系列入门教程,也可以直接在命令行中启动这些样例。

编写一个SimpleApplication

创建 jme3test.helloworld包,在其中创建HelloJME3.java文件。

在NetBeans中,你可以在包节点上单击右键

  •   在弹出菜单中选择New...> Java Class,这样就创建了一个新文件。
  •   输入类名:HelloJME3
  •   输入包名: jme3test.helloworld
  •   点击Finish。

 

样例代码

在HelloJME3.java文件中输入以下代码:

 
  
ContractedBlock.gif ExpandedBlockStart.gif 展开代码
 
    
1 package jme3test.helloworld;
2
3   import com.jme3.app.SimpleApplication;
4   import com.jme3.material.Material;
5   import com.jme3.math.Vector3f;
6 import com.jme3.scene.Geometry;
7 import com.jme3.scene.shape.Box;
8 import com.jme3.math.ColorRGBA;
9
10 /** Sample 1 - how to get started with the most simple JME 3 application.
11 * Display a blue 3D cube and view from all sides by
12 * moving the mouse and pressing the WASD keys. */
13 public class HelloJME3 extends SimpleApplication {
14
15 public static void main(String[] args){
16 HelloJME3 app = new HelloJME3();
17 app.start();
18 }
19
20 @Override
21 public void simpleInitApp() {
22 Box b = new Box(Vector3f.ZERO, 1 , 1 , 1 );
23 Geometry geom = new Geometry( " Box " , b);
24 Material mat = new Material(assetManager, " Common/MatDefs/Misc/Unshaded.j3md " );
25 mat.setColor( " Color " , ColorRGBA.Blue);
26 geom.setMaterial(mat);
27 rootNode.attachChild(geom);
28 }
29 }

Build,然后运行HelloJME3。如果弹出jme设置对话框,选择默认设置即可。

2011042010225114.png

1.你将看到一个“简陋”的窗口,里面有一个3-D的立方体。

2011042010231210.png

2.按WASD键或移动鼠标可以导航,从各个角度观察。

3.按Esc键退出程序。

祝贺你,运行成功!那我们是怎么做到呢?

理解代码

以下是所有JME3游戏都必须遵从的一些规则。

启动游戏

请注意,HelloJME3类继承了com.jme3.app.SimpleApplication,而com.jme3.app.SimpleApplication则是com.jme3.app. Application的子类。每个JME3游戏都是com.jme3.app. Application的一个(直接或间接的)实例。

要运行JME3游戏,必须实例化一个以Application为基类的类,然后调用start()方法。

 
  
 
   
HelloJME3 app = new HelloJME3();
app.start();

通常在main方法里面完成这一步。

提示:Java高手们也可以复制SimpleApplication,将其用作模板,在自己的程序中使用。

初始化场景

这个简单的“游戏”只有一个孤零零的立方体。下面就是创建这个立方体,并为它定位、上色,然后添加到场景中的代码。(后面将详细讨论其中细节。)

 
  
ContractedBlock.gif ExpandedBlockStart.gif 展开代码
 
    
public void simpleInitApp() {
Box b
= new Box(Vector3f.ZERO, 1 , 1 , 1 ); // create cube shape
Geometry geom = new Geometry( " Box " , b); // create cube geometry from the shape
Material mat = new Material(assetManager,
" Common/MatDefs/Misc/Unshaded.j3md " ); // create a simple material
mat.setColor( " Color " , ColorRGBA.Blue); // set color of material
geom.setMaterial(mat); // set the cube's material
rootNode.attachChild(geom); // attach the cube to the scene
}

每个JME3游戏启动时都将自动调用一次simpleInitApp()方法。游戏启动之前,你得在simpleInitApp()方法中创建或加载游戏对象!以下是通常的流程:

1. 初始化游戏对象

  •  创建或加载所有的对象,并为它们定位。
  • 要想在场景中显示某个geometry(如box),必须将其添加到rootNode
  • 示例:加载玩家、地形、天空、敌人、障碍物,并将它们摆放在初始位置。
2.初始化游戏变量
  • 游戏变量用于跟踪记录游戏状态。在此设置好初始值。
  •  示例:设置score0health100%,如此等等。
3.初始化导航
  • 以下键位是默认预先设定好的“
  • WASD四处走动
  • 鼠标和上下左右键摇动摄像机
  • Esc键退出游戏

关键之处:JME程序都有一个rootNode对象。你的游戏将自动继承获得rootNode对象。在场景中显示的对象都附加在rootNode上。换句话说,如果只创建一个对象,而不把它附加到rootNode,它就不会在场景中显示。

小结

寥寥数行代码不过显示了一个静态的3-D对象,不过即使如此简单,也足以让你在3D场景中畅游了。学到这里,你大概已经体会到,SimpleApplication的确是个不错的“起跑点”,它为你提供了如下便利:

  • simpleInitApp()方法,用于初始化游戏对象
  • rootNode,将你的geometry附加到rootNode,即可在场景中显示
  • 实用的默认导航设置

真正的游戏中,你需要:

  1. 初始化game world
  2. 在事件循环中触发动作
  3. 响应用户输入

后面的教程里,你将学到如何用jMonkeyEngine 3完成这些任务!

继续学习Hello Node教程,这一节你将看到初始化game world(也就是secne graph,场景图)的更多细节。

转载于:https://www.cnblogs.com/cybercser/archive/2011/04/20/2021976.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
com.jme3.animation com.jme3.app com.jme3.app.state com.jme3.asset com.jme3.asset.pack com.jme3.asset.plugins com.jme3.audio com.jme3.audio.joal com.jme3.audio.lwjgl com.jme3.audio.plugins com.jme3.bounding com.jme3.bullet com.jme3.bullet.collision com.jme3.bullet.collision.shapes com.jme3.bullet.control com.jme3.bullet.joints com.jme3.bullet.joints.motors com.jme3.bullet.nodes com.jme3.bullet.nodes.infos com.jme3.bullet.util com.jme3.collision com.jme3.collision.bih com.jme3.effect com.jme3.export com.jme3.export.binary com.jme3.export.xml com.jme3.font com.jme3.font.plugins com.jme3.input com.jme3.input.awt com.jme3.input.binding com.jme3.input.dummy com.jme3.input.event com.jme3.input.lwjgl com.jme3.light com.jme3.material com.jme3.material.plugins com.jme3.math com.jme3.niftygui com.jme3.post com.jme3.renderer com.jme3.renderer.jogl com.jme3.renderer.layer com.jme3.renderer.lwjgl com.jme3.renderer.queue com.jme3.scene com.jme3.scene.control com.jme3.scene.debug com.jme3.scene.mesh com.jme3.scene.plugins com.jme3.scene.plugins.ogre com.jme3.scene.shape com.jme3.shader com.jme3.shader.plugins com.jme3.shadow com.jme3.system com.jme3.system.jogl com.jme3.system.lwjgl com.jme3.terrain com.jme3.texture com.jme3.texture.plugins com.jme3.ui com.jme3.util com.jme3.util.xml com.jme3.video com.jme3.video.plugins.jheora jme3game.cubefield jme3test jme3test.app jme3test.asset jme3test.audio jme3test.awt jme3test.bounding jme3test.bullet jme3test.collision jme3test.conversion jme3test.effect jme3test.export jme3test.gui jme3test.light jme3test.material jme3test.math jme3test.model jme3test.model.anim jme3test.model.shape jme3test.niftygui jme3test.post jme3test.scene jme3test.stress jme3test.texture jme3tools.converters jme3tools.converters.model jme3tools.converters.model.strip jme3tools.nvtex jme3tools.optimize jme3tools.preview

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值