第一章:jME3简介

概述

jMonkeyEngine3是一个用纯Java开发的免费3D游戏引擎。拜开源社区所赐,它拥有非常非常多的功能,远多于一般游戏开发的需要。而且它的API非常简洁明了,只需要花少量的学习时间就可以掌握。

  • 场景管理
  • 可编程材质(着色器)
  • 图形用户界面
  • 内存资源管理
  • 输入系统
  • 声音系统
  • 碰撞检测
  • 物理引擎
  • 特效系统
  • 骨骼动画
  • 地形系统
  • 灵活易扩展的逻辑模块
  • 性能优化(八叉树、层次细节、硬件加速等)

从本质上来讲,jME3就是一个第三方Java类库,一旦在你的Java/Android项目中引用了jME3的jar文件,就可以获得3D引擎的能力。

下面只用7行有效代码,就可以在手机上显示钢铁侠3D模型。

钢铁侠

下图是jME3的一些主要的jar。这些类库按不同的功能分别打包,可以根据需要来添加到项目中。

jar文件

jME3的这些组件已经发布到了公共仓库中:

jME3类库的Group ID是org.jmonkeyengine,最新的版本号(version)为3.1.0-stable。下列组件已经全部上传到公共仓库中,你可以通过Gradle或Maven去获取它们:

  • jme3-core - 任何jME3项目都需要的核心库
  • jme3-effects - 各种滤镜、粒子、水面等特效。
  • jme3-networking - jME3的网络模块(别名SpiderMonkey)。
  • jme3-plugins - 加载orge、fbx等模型文件的插件。
  • jme3-jogg - 加载jogg格式的音频文件。
  • jme3-terrain - 地形生成API,可使用高度图来生成3D地形。
  • jme3-blender - 加载blender模型文件,仅适用于桌面开发,手机显卡不支持。
  • jme3-jbullet - 基于jbullet的物理引擎(仅适用于桌面开发,手机用不了,而且JCenter上没有这个组件)。jme3-jbulletjme3-bullet只能二选一,不能同时存在于同一个项目中。
  • jme3-bullet - 基于BulletPhysics的物理引擎,需要jme3-bullet-nativejme3-bullet-native-android
  • jme3-bullet-native - BulletPhysics所需的静态库文件(dll、so),仅适用于桌面开发。注意:jbulletBulletPhysics是两码事,它不需要这些本地库文件。
  • jme3-bullet-native-android - BulletPhysics所需的静态库文件(dll、so),仅适用于Android开发。
  • jme3-niftygui - 为jME3添加NiftyGUI支持,可以使用NiftyGUI来制作图形用户界面 (JCenter上没有这个组件)。
  • jme3-desktop - jME3桌面应用开发所需的核心API。
  • jme3-lwjgl - jME3的桌面应用渲染模块,依赖LWJGL。
  • jme3-lwjgl3 - jME3.1新增的模块! 使用LWJGL3为桌面进行渲染。
  • jme3-jogl - jME3的桌面应用渲染模块,依赖JOGL。它是LWJGL和LWJGL3的替代品,可选。有LWJGL你就不需要JOGL,用JOGL就不需要LWJGL。
  • jme3-android - jME3的Android应用核心模块。
  • jme3-android-native - jME3开发Android应用所需的本地库文件。
  • jme3-ios - jME3开发iOs应用的核心API (JCenter上没有这个组件)

jME3开发桌面应用,你至少需要下面这几个组件:

  • jme3-core
  • jme3-desktop
  • jme3-lwjgljme3-lwjgl3

jME3开发Android应用,你至少需要下面这几个组件:

  • jme3-core
  • jme3-android
  • jme3-android-native

jME3 SDK

jMonkeyEngine3 SDK是开发团队基于NetBeans平台开发的jME3集成开发环境。它包含场景制作、模型预览、材质编辑等诸多游戏开发所需的功能。jMonkeyPlatform跟jME3 SDK是一码事,说的都是这个东西。

SDK

SDK 3.0

官方推荐初学者使用jME3 SDK来开发游戏。官方下载地址为: https://github.com/jMonkeyEngine/sdk/releases

无论你习惯用jME3 SDK,还是Eclipse、IntelliJ IDEA,或者Android Studio,都可以使用jMonkeyEngine3来开发游戏。毕竟这个引擎的本质就是一堆jar文件,选择自己熟悉的工具可以提升你的开发效率。

注意:在jME3.1.0之后SDK就出了一个对中国开发者不太友好的bug,菜单上的中文变成了方框乱码。

SDK 3.1

这个bug的原因是NetBeans会自动根据用户电脑的语言来进行本地化,但却使用了一种不支持中文的字体。我向官方团队反馈了这个bug#73,但是到目前为止都没有修复。

如果使用SDK的话,我建议你把它的语言换成英文,反而会更好用一些。

修复方法很简单,在jME3 SDK的安装目录下找到etc文件夹中的jmonkeyplatform.conf文件,使用记事本或者Editplus之类的文本编辑工具打开它 。找到 default_options 配置项,在末尾加上-J-Duser.country=US,将地区设置成美国,这样再次打开jME3 SDK的时候界面就变成了全英文。修改后的default_options看起来差不多是这样的:

default_options="--branding jmonkeyplatform -J-Xms24m -J-Dsun.java2d.dpiaware=true -J-Dapple.laf.useScreenMenuBar=true -J-Dawt.useSystemAAFontSettings=lcd -J-Dswing.aatext=true -J-Xmx512m -J-XX:MaxDirectMemorySize=2048m -J-Dsun.zip.disableMemoryMapping=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Duser.country=US"

获取jME3

官方下载分流:

JAR与源代码

jME3在github.com的地址是 github.com/jMonkeyEngine/jmonkeyengine,你可以通过Clone or download直接下载它的源代码,或者从release中下载最新发布的jar包。

github

如果从github下载比较慢,你也可以通过我的百度网盘下载这个引擎。

jME3.1 稳定版:http://pan.baidu.com/s/1hrRPeJE

如果你是使用Eclipse做开发,我曾写过一个教程,还录过一套视频。质量不高,但还是推荐给你。

如果你更喜欢maven或gradle之类的工具,那就更好了。在你的项目依赖中添加如下的代码:

Gradle

repositories {
    jcenter()
    //maven { url "http://dl.bintray.com/jmonkeyengine/org.jmonkeyengine" }
}

dependencies {    
    def jme3 = [g:'org.jmonkeyengine', v:'3.1.0-stable']
    compile "$jme3.g:jme3-core:$jme3.v"
    compile "$jme3.g:jme3-desktop:$jme3.v"
    compile "$jme3.g:jme3-lwjgl:$jme3.v"
}

例如,在Android Studio中:

Android Studio

例如,Eclipse Neon 在安装了 BuildShip插件后,也可以使用Gradle。

Eclipse with Gradle

Maven

<properties>
  <jme3_g>org.jmonkeyengine</jme3_g>
  <jme3_v>3.1.0-stable</jme3_v>
</properties>

<repositories>
  <repository>
    <id>jcenter</id>
    <url>http://jcenter.bintray.com</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>${jme3_g}</groupId>
    <artifactId>jme3-core</artifactId>
    <version>${jme3_v}</version>
  </dependency>
  <dependency>
    <groupId>${jme3_g}</groupId>
    <artifactId>jme3-desktop</artifactId>
    <version>${jme3_v}</version>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>${jme3_g}</groupId>
    <artifactId>jme3-lwjgl</artifactId>
    <version>${jme3_v}</version>
  </dependency>
</dependencies>

官方教程和例子

在jME3的github页面中,有一个名为jme3-examples的模块,其中有大量的示例源代码,全面展示了jME3的各种功能和特性。

所有例子中,jme3test.helloworld包中的13个例子是最基础的。官方推荐的学习顺序是:

第一个JME3程序(HelloJME3) – 实现一个简单的程序
场景管理(HelloNode) – 在场景图中改变几何体和节点属性
资源管理(HelloAssets) – 加载三维模型、场景和其他的资源
事件循环(HelloLoop) – 在事件循环中实现事件控制功能
输入处理(HelloInput) – 对于键盘和鼠标的输入作出响应
材质(HelloMaterial) – 设置材质、纹理、透明度
动画(HelloAnimation) – 控制动画模型
拣选(HelloPicking) – 射击、压下按钮、选择、捡起选项
碰撞(HelloCollision) – 建造墙壁和固体地板
地形(HelloTerrain) – 使用贴图创建小山的风景
音效(HelloAudio) – 按照位置和事件来实现三维音效
特效(HelloEffects) – 创建粒子特效,比如:火焰、爆炸、魔法
物理(HelloPhysics) – 撞球和坠落的砖头

如果你下载了jME3.1-stable,解压缩后可以在文件夹中看到一个名为jMonkeyEngine.jar的可执行jar文件,其中就是编译过的example。运行这个程序,可以查看官方提供的诸多例子。

examples

examples2

如果你下载了jME3 SDK,通过选择菜单 File -> New Project,可以创建一个JME3的测试项目。这个项目会自动包含exmaples中的源代码,并可以编译运行。

examples3

jme3test

如果你用的是Intellij IDEA 或者 Eclipse,我想你应该不介意下载源代码,然后像我这样把jme3-exmaples文件夹里面的东西直接拷贝到自己的项目里面吧?

eclipse