第五章:在其他IDE中管理资产
本文将介绍在不同的Java开发工具中,如何创建资产目录。
Eclipse
新建一个普通的Java工程,根据你自己的喜好来命名。
在工程目录下,手动创建 assets 资产目录结构。
右键单击 assets
文件夹,在弹出菜单中选择 Build Path -> Use as Source Folder
。这样做将把 assets
转化为Eclipse的源码目录,并当作classpath来识别。
assets
中的文件夹现在都变成了 package ,想要继续在其中创建子文件夹,需要使用创建 package 的方式来操作。
例如在 Textures
中创建 Monkey
文件夹,要右键单击 Textures
,然后在弹出菜单中选择 New -> Pacakge
。
随后,在 New Java Package
窗口中,将包名(Name)写成 Textures.Monkey
,最后点击 Finish
。
同理,在 Models
目录中创建 Monkey
目录,则需要创建 Models.Monkey
包。
建完之后,分别把 DiffuseMap.png 和 monkey.j3o 文件放进去,结构是这样的。
Eclipse工程中的资产目录结构就是这样了。
验证效果
如果想要用Eclipse工程开发jME3程序的话,还需要添加 jme3 的jar文件。如果你用的是Windows系统,至少需要这么几个jar文件:
// {version} 代表具体的版本号,例如 3.1.0-stable
jme3-core-{version}.jar
jme3-desktop-{version}.jar
jme3-lwjgl-{version}.jar
lwjgl-2.9.3.jar
lwjgl-platform-2.9.3-natives-windows.jar
这些 jar 文件就是 jMonkeyEngine 的最小形态。如果你不知道怎么获得这些jar文件,请看 jME3简介 中“获取jME3”部分。
若已下载 jMonkeyEngine SDK ,还可以直接去 SDK 安装目录的 jmonkeyplatform/libs
文件夹下找到它们。
假设你已经获得了这些 jar 文件,在工程目录下创建 libs
文件夹,把这5个jar文件放进去。
注意,因为我这个工程是在Ubuntu系统上开发的,所以第5个jar用的是 lwjgl-platform-2.9.3-native-linux.jar
。
鼠标选中这5个jar文件,然后单击右键,在弹出菜单中选择 Build Path -> Add to build path
。这样做将把它们添加到工程编译的classpath中,并且将显示在 Referenced Libraries中。
在 src 中创建 mygame.Main 类,作为运行入口。
Main.java 的内容和之前在SDK中写得一模一样,不需要做任何修改。
package mygame;
import com.jme3.app.SimpleApplication;
import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Spatial;
/**
* 测试加载j3o模型
* @author yanmaoyuan
*/
public class Main extends SimpleApplication {
public static void main(String[] args) {
Main app = new Main();
app.start();
}
@Override
public void simpleInitApp() {
// 加载j3o模型
Spatial model = assetManager.loadModel("Models/Monkey/monkey.j3o");
rootNode.attachChild(model);
// 添加灯光
DirectionalLight sun = new DirectionalLight();
sun.setColor(new ColorRGBA(0.7f, 0.7f, 0.7f, 1f));
sun.setDirection(new Vector3f(-3, -4, -5).normalizeLocal());
rootNode.addLight(sun);
AmbientLight ambient = new AmbientLight();
ambient.setColor(new ColorRGBA(0.2f, 0.2f, 0.2f, 1f));
rootNode.addLight(ambient);
}
}
运行结果也是一模一样。
从现在开始,下面就不再重复运行Main类了,请读者自己验证。
IDEA
在Idea中创建一个Java工程。
根据你的喜好来为项目命名。我将工程命名为 HelloGame
,包名为 mygame
。
生成工程后,将左侧导航切换成 Project
视图。
右键单击 HelloGame
工程名,在弹出菜单中选择 New -> Directory
,输入文件夹的名称 assets
,即可创建资源目录。
继续在 assets
中创建 Interfaces
、Models
、Textures
等目录,顺便把 monkey.j3o
和 DiffuseMap.png
分别放到对应的目录中。
然后右键单击 assets
目录,在弹出菜单中选择 Mark Directory as -> Resources Root
。这将把 assets
转化为 IDEA 工程的资源根目录。
IDEA中的资源目录结构就建好了。
验证效果
想要用IDEA开发JME3程序,同样需要添加一些jar文件。
创建 libs
文件夹,然后把5个最基本的jar文件拷贝进去。
选中这些jar文件,然后单击右键,在弹出菜单中选择 Add as Library..
在弹出对话框中输入Library的名字(Name),并选择应用级别(Level)。
我将这套库文件命名为 jme3-desktop
,因为它们只适用于桌面开发;级别设为 Module Library
,因为我只打算在 HelloGame
这个 module 中使用它。
剩下的事情就简单了。把前面写好的测试代码拷贝到 mygame.Main.java 中,然后编译运行程序,结果与在 SDK、Eclipse 中是一样的。
AndroidStudio
创建一个 Android 工程,按你的喜好来给App命名。我将应用命名为 HelloGame
,包名为 mygame
。
Android Studio 创建的工程结构如下:
该工程默认是没有资源目录的,手动在 app/src/main
目录下创建一个 assets
目录。然后在 assets
目录中创建 Interfaces
、Models
、Textures
等目录,顺便把 monkey.j3o
和 DiffuseMap.png
分别放到对应的目录中。
然后等待 Android 工程同步,它会自动识别 assets
目录。
这样 Android Studio 的资产目录结构就OK了。
验证效果
Android 项目至少需要3个jme3的jar文件,分别是:
jme3-core-{version}.jar
jme3-android-{version}.jar
jme3-android-native-{version}.jar
把这三个 jar 文件拷贝到Android项目的 app/libs
目录下。
然后编辑 app/build.gradle
脚本,在 dependencies
块中增加 compile fileTree(dir: 'libs', include: ['*.jar'])
。同步工程后,Android工程就会识别 libs 目录下的 jar 文件。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// ..
}
创建 mygame.hellogame.Main 类,编写验证代码。除了没有 main 方法外,与前面的验证代码并没有什么区别。
package mygame.hellogame;
import com.jme3.app.SimpleApplication;
import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Spatial;
/**
* 测试加载j3o模型
* @author yanmaoyuan
*/
public class Main extends SimpleApplication {
@Override
public void simpleInitApp() {
// 加载j3o模型
Spatial model = assetManager.loadModel("Models/Monkey/monkey.j3o");
rootNode.attachChild(model);
// 添加灯光
DirectionalLight sun = new DirectionalLight();
sun.setColor(new ColorRGBA(0.7f, 0.7f, 0.7f, 1f));
sun.setDirection(new Vector3f(-3, -4, -5).normalizeLocal());
rootNode.addLight(sun);
AmbientLight ambient = new AmbientLight();
ambient.setColor(new ColorRGBA(0.2f, 0.2f, 0.2f, 1f));
rootNode.addLight(ambient);
}
}
修改 mygame.hellogame.MainActivity
类,使其继承 com.jme3.app.AndroidHarness
类,并在构造方法中设置程序的启动类为 mygame.hellogame.Main
。
package mygame.hellogame;
import android.app.Activity;
import android.os.Bundle;
import com.jme3.app.AndroidHarness;
public class MainActivity extends AndroidHarness {
public MainActivity() {
this.appClass = "mygame.hellogame.Main";
}
}
编译项目,并在真机或模拟器中调试运行。下面是在我的手机上运行的效果。
Maven
Maven工程有其标准目录结构,你可以通过下面的文章了解详细内容。
Maven 工程已经定义了 resources 目录,用来管理项目中使用的资源文件。
src/main/resources
,负责管理项目主体的资源。在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。src/test/resources
,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后续的测试做好了准备。
一般支持Maven的IDE都会自动创建这些目录。如果没有的话,手动创建 src/main/resources
目录即可。下图分别是 Eclipse 和 IDEA 中的Maven工程结构。
src/main/resources
就是资产文件的根目录。在其中创建子目录,并把资产文件放进去。
Maven工程中的资产目录就搞定了。
验证效果
Maven工程可以自动下载所需的依赖库。在 pom.xml
中添加如下脚本:
- 在
<repositories></repositories>
块中添加jcenter
仓库 - 在
<dependencies></dependencies>
块中添加对jme3-core
、jme3-desktop
、jme3-lwjgl
的依赖; - 为了方便引用,可以用
<properties>
把 jMonkeyEngine 的groupId
和version
配置成变量。
代码如下:
<properties>
<jme3_g>org.jmonkeyengine</jme3_g>
<jme3_v>3.2.0-beta2</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>
执行maven命令,就会自动下载这些 jar 文件。然后在 src/main/java
创建 mygame.Main
类,编写验证代码,最后编译运行即可。
运行截图就不贴了,都是一样的。
Gradle
Gradle 工程也有标准目录结构,与 Maven 是一模一样的,只不过 IDE 不会直接把这些文件夹全创建出来。一般来说,只需要用 src/main/java
来放源代码,用 src/main/resources
来放资源文件即可。
下图是 IDEA 中创建的 Gradle 工程。
在 src/main/resources
目录中创建资产目录结构,并把资产文件拷贝进去即可。
下图是 Eclipse 中创建的 Gradle 工程,它并没有自动创建 resources
目录。
手动在 src/main
目录下创建 resources
目录,并建立资产目录结构,再把资产文件拷贝到对应目录中。
鼠标右键单击 build.gradle
文件,在弹出菜单中选择 Gradle -> Refresh Gradle Project
。这么做会让 Eclipse 刷新 Gradle 工程,识别刚才的改动。
在 Package Explorer
视图中,可以看到完整的资产目录结构。
验证结果
Gradle 与 Maven 一样,可以自动从远程仓库下载所需要的 jar 文件。
编辑 build.gradle
脚本,在 repositories
块中添加 jcenter()
仓库,并在 dependencies
块中添加对 jme3-core
、jme3-desktop
、jme3-lwjgl
的依赖。
apply plugin: 'java'
repositories {
jcenter()
mavenCentral()
}
dependencies {
def jme3 = [g:'org.jmonkeyengine', v:'3.2.0-beta2']
compile "$jme3.g:jme3-core:$jme3.v"
compile "$jme3.g:jme3-desktop:$jme3.v"
compile "$jme3.g:jme3-lwjgl:$jme3.v"
testCompile 'junit:junit:4.12'
}
如果你想使用自己电脑上的jar文件,可以这么做:
- 在工程目录下创建
libs
目录,然后把 jar 文件放进去; - 在
build.gradle
的dependencies
块中,添加一句compile fileTree(dir: 'libs', include: ['*.jar'])
参考:
这两种方式都可以在 Gradle 工程中添加所需要的 jar 文件,前者是自动管理,后者是手动管理。配置好 build.gradle 文件后,刷新一下 Gradle 工程,让它下载或识别这些 jar 文件即可。
接着在 src/main/java
中创建 mygame.Main 类,编写验证代码,运行看结果吧。
代码和截图就不贴了,跟前面一模一样。