jMonkeyEngine 3 Tutorial (1) – Hello SimpleApplication

このチュートリアルは、 *jMonkeyEngine SDK* を使うことを前提としています。

プロジェクトの作成

  1. メインメニューから ファイル→新規プロジェクト
  2. JME3→Basic Game を選び、
  3. Project Nameを入力します。 例 : “HelloWorldTutorial”
  4. 作成する新規プロジェクトのパスを決めます。 例 : ホームディレクトリにjMonkeyProjectsを作成し、そこにする。
  5. 終了をクリック

さらに詳しいことは Project Creation

SimpleApplication を書く

ここでは、プロジェクト内のjme3test.helloworldパッケージを作成し、その中にファイルHelloJME3.javaを作成する。

  1. 作成したプロジェクト内の ソースパッケージ を右クリック
  2. 新規→Javaクラス を選ぶ
  3. クラス名を入力: HelloJME3
  4. パッケージ名を入力: jme3test.helloworld.
  5. 終了をクリック

サンプルコード

作成したクラスを以下のコードに置き換えます。

 
package jme3test.helloworld;
 
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import com.jme3.math.ColorRGBA;
 
/** Sample 1 - how to get started with the most simple JME 3 application.
 * Display a blue 3D cube and view from all sides by
 * moving the mouse and pressing the WASD keys. */
public class HelloJME3 extends SimpleApplication {
 
    public static void main(String[] args){
        HelloJME3 app = new HelloJME3();
        app.start(); // start the game
    }
 
    @Override
    public void simpleInitApp() {
        Box b = new Box(Vector3f.ZERO, 1, 1, 1); // create cube shape at the origin
        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 to blue
        geom.setMaterial(mat);                   // set the cube's material
        rootNode.attachChild(geom);              // make the cube appear in the scene
    }
}
 

コード内で右クリックして、 ファイルを実行 を選択する。ダイアログが現れ、そこで設定を確認する。

  1. シンプルな3Dキューブが現れる。
  2. WASDキーを押したり、マウスを動かしたりしてオブジェクトを動かすことができる。
  3. FPSやオブジェクト数が左下に表示される。これは開発時に使用し、リリース時には削除する。
  4. Escapeキーでアプリケーションを終了する。

コードを理解する

上記のコードは、シーンを初期化し、アプリケーションを開始する。

SimpleApplicationの開始

最初の行について。HelloJME3.java クラスが com.jme3.app.SimpleApplication を継承している。

 
public class HelloJME3 extends SimpleApplication {
  // your code...
}
 

常に JME3のゲームは com.jme3.app.SimpleApplication のインスタンスとなっている。
SimpleApplicationクラスは、3Dグラフィクスを管理し、自動的に画面に描画する。
ゲームエンジンが簡単な作業でそれを行なってくれる。

標準的なJavaアプリケーションとして、main()メソッドからのJME3ゲームを開始する

 
    public static void main(String[] args){
        HelloJME3 app = new HelloJME3(); // instantiate the game
        app.start();                     // start the game!
    }
 

このコードではアプリケーションウィンドウを開くだけである。次にこのアプリケーションに入れていくものについて学ぶ。

専門用語を理解する

何がしたいか? JME3の用語でなんと言うか
キューブを作りたい 1×1×1 Box shape の Geometry を作る
青色を使いたい blue Color propertyのMaterial を作る
キューブを青くしたい Box GeometryのMaterialをセットする
キューブをシーンに追加したい rootNodeにBox Geometryを含める
キューブをセンターに出現させたい Boxの起点を Vector3f.ZERO にする

シーンの初期化

コードサンプルを参照する。 アプリケーションを開始すると、simpleInitApp()メソッドが最初に自動的によびだされる。
常にJME3のゲームはこのメソッドを実装していなければならない。 simpleInitApp()内で、ゲーム開始前に必要なオブジェクトを読み込んでおく。

 
public void simpleInitApp() {
       // your initialization code...
    }
 

青いキューブを表示させるための初期コードは以下のようになる。

 
    public void simpleInitApp() {
        Box b = new Box(Vector3f.ZERO, 1, 1, 1); // create a 1x1x1 box shape at the origin
        Geometry geom = new Geometry("Box", b);  // create a cube geometry from the box shape
        Material mat = new Material(assetManager,
          "Common/MatDefs/Misc/Unshaded.j3md");  // create a simple material
        mat.setColor("Color", ColorRGBA.Blue);   // set color of material to blue
        geom.setMaterial(mat);                   // set the cube geometry 's material
        rootNode.attachChild(geom);              // make the cube geometry appear in the scene
    }
 

典型的なJME3のゲームの初期プロセスは以下のようになる。

  1. ゲームオブジェクトの初期設定
    • オブジェクトの作成もしくは読み込み、そして配置
    • rootNodeへ連結し、シーンにオブジェクトを表示させる
    • 例: プレイヤー、地形、空、敵、障害物の読み込みと、それらの開始位置
  2. 変数の初期設定
    • ゲームの状態を追跡するための変数の初期設定
    • 開始時の変数をセットする
    • 例: 体力100%、スコア 0
  3. キー入力やマウス操作の初期化
    • 次のものははじめから設定されている
      • W,A,S,Dキー – シーン内を動く
      • マウス、矢印キー – カメラの回転
      • Escapeキー - ゲーム終了
    • 独自の追加キーとマウスクリックアクションを定義する
    • 例: クリックでシュート、スペースでジャンプなど

最後に

SimpleApplication は以下のことをするための出発点である。

  • simpleInitApp() でオブジェクトを作成する
  • rootNode にオブジェクトを登録すると、シーンに追加される
  • シーンのナビゲーションとして使える便利なデフォルトの入力設定

ゲームを開発するとき、以下の事が必要となる。

  • ゲームシーンの初期設定
  • ゲームアクションのきっかけ
  • ユーザの入力に対する応答

次のチュートリアルでは、jMonkeyEngine3でこれらのタスクを実行する方法を解説する。