谁说Java不适合写游戏?

In the mood of java...

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文件中输入以下代码:

展开代码
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设置对话框,选择默认设置即可。

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

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,将其用作模板,在自己的程序中使用。

初始化场景

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

展开代码
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,场景图)的更多细节。

posted on 2011-04-20 10:24  sailingbird  阅读(2276)  评论(0编辑  收藏  举报

导航