项目创建
由于它的Android 和HTML5/GWT后台,libgdx 与Eclipse紧密结合。本章讨论怎样在Eclipse中创建一个libgdx项目。如果你使用的是IntelliJ, 请查看guide to use libgdx with IntelliJ IDEA 。如果你更喜欢使用其他的IDE,请参考文章末尾列出的详细说明。iOS项目的libgdx应用使用MonoTouch和设置UI生成的一个Ant脚本进行管理。
使用 "Libgdx Setup"
在0.9.3版本中,Aurelien Ribon 引入了一个易用的应用叫做"Libgdx Setup"。下面的步骤将创建开发桌面,Android, iOS和HTML5所需的一切。
- 下载 gdx-setup-ui.jar,地址: http://libgdx.badlogicgames.com/nightlies/dist/gdx-setup-ui.jar. 该jar同样包含于所有的稳定版本和每日构建版本中。
- 双击执行这个jar,或者从命令行执行: java -jar gdx-setup-ui.jar
- 指定项目配置 (配置面板)
- 指定libgdx稳定/每日构建版本的zip文件,或者按下其中一个按钮下载最新的版本(选择库面板) Use the nightlies if you want to deploy to iOS!
- 点击 "Generate projects" 按钮(创建面板)
- 打开Eclipse并导入生成的工程到你的workspace
- File -> Import -> Existing Projects into Workspace
- 点击"Browse", 选择包含生成项目的文件夹.
- 确保选中所有的工程, 点击"Finish"
- 修复 HTML5/GWT 的项目error, 打开"Problems"视图, 右键点击错误信息 "The GWT SDK JAR gwt-servlet.jar is missing in the WEB-INF/lib directory" 并选择 "Quick Fix". 点击"Finish".
- For the iOS Project, launch Xamarin Studio on Mac OS X and open the solution in the folder of the ios project. Build the application once, then reopen the solution.Please read this article for more information on the iOS backend!
项目布局
假设在配置页面把项目命名为 "my-gdx-game" ,结束后将包含4个工程:
- Core project ("my-gdx-game"): 包含应用的所有代码,没有所谓的启动类。所有其他项目都链接至该工程。该工程通常被引用为"core project"。
- Android project ("my-gdx-game-android"): 包含启动类和其他在Android中运行应用所需的文件。assets/ 文件夹保存应用中所有平台的资源。
- Desktop project ("my-gdx-game-desktop"): 包含在桌面运行应用的启动类。链接至Android工程的 assets/ 文件夹 和"core project"。
- HTML5 project ("my-gdx-game-html"):包含以本地HTML5应用的方式运行应用的启动类和其他所需文件。链接至Android工程的 assets/ 文件夹(see gwt.xml) 和"core project"。
- iOS project ("my-gdx-game-ios"): 包含以本地iOS应用的方式运行应用的启动类和其他所需文件。链接至Android工程的 assets/data 文件夹。包含一个Ant脚本,该脚本将在每次build前调用用以编译"core project"的源代码为.Net集(.dll file),这些.Net集最终被用来构建本地应用。Please read this article for more information on the iOS backend!
应用的所有资源都应该存储在Android工程的 assets 文件夹中。桌面,iOS和HTML5工程链接至该文件夹,因而无需再次重复存储这些资源。
Note for iOS: Xamarin Studio will not automatically add files you put into your Android project's assets folder. You have to add those manually by right clicking the project and linking to the files. You then have to set the "Build Action" of each newly added file to "Content", otherwise the file will not be included in the final build output! Also, please read throughthis article You'll also have to manipulate a script that comes with the iOS SDK!
运行应用
- Desktop: 右键桌面工程, Run As -> Java Application.选择桌面启动类 (e.g. Main.java).
- Android: 确保你已经连接了一个设备并且该设备已显示在DDMS中。如果你不清楚这是什么意思, 请参考 Android Developer Guide. 右键 Android 工程, Run As -> Android Application.
- iOS: In Xamarin Studio, select a release or debug profile (either simulator or device) then hit the build and run button.
- HTML5:有两种模式可以运行你的应用。
- development/hosted mode: 通过GWT插件运行真正的Java代码,允许调试和热插拔代码(某种程度而言).
- 右键HTML5 工程, Run As -> Web Application.
- 在 "Web Development" 视图中,单击 URL.打开 标准浏览器。如果你还没安装GWT插件,系统会提示你安装。安装完插件后,简单地刷新下浏览器。
- production/web mode: 需要一个web服务器服务这些编译好的文件 (e.g. Ngnix 或允许从本地文件执行javascript的浏览器 .
- 右键HTML5 工程, Google -> GWT Compile
- 一旦编译完成,把war/ directory 下的内容放置到你的web服务器的服务目录下。忽略WEB-INF文件夹。
- 把浏览器指向一个显示.html文件的URL。
调试应用
- Desktop: 右键桌面工程, Debug As -> Java Application. 选择桌面启动类 (e.g. Main.java). 在需要的地方设置断点,热插拔代码(在调试时编辑和保存)以快速测试更改和重启应用。
- Android: 假设已连接了一个设备, Debug As -> Android Application. 不支持热插拔, 但可以使用 DDMS 视图来查看内存使用情况, to check your memory usage, 分析应用等等。参考 Android Development Guide 获取更多信息.
- iOS: in Xamarin Studio, select a debug profile (either simulator or device) then hit the build and debug button.
- HTML5:
- development/hosted mode: 通过GWT插件运行真正的Java代码,允许调试和热插拔代码(某种程度而言).
- 右键HTML5 工程, Debug As -> Web Application.
- 在 "Web Development" 视图中,单击 URL.打开标准浏览器。
- 在Java代码中设置断点。如果编辑和保存代码,你必须刷新浏览器来使更改生效。这实质上会重启应用。不过这总比重新编译要快。
- production/web mode:
- 右键HTML5 工程, Google -> GWT Compile
- 更改 "Advanced"中的标记为 -strict -draftCompile ,并更改"Output Style" 为 "detailed". 这会生成非常可读的Javascript, 可以1:1的匹配到你的代码。
- 一旦编译完成,把war/ directory 下的内容放置到你的web服务器的服务目录下。忽略WEB-INF文件夹。
- 把浏览器指向一个显示.html文件的URL。
- 打开 Firebug 或类似工具, 打开Javascript并设置断点, 观察callstack等等. 查找Java类方法,直接搜索package/class/method 名。
手动设置项目
注意:目前iOS项目还不支持手动设置模式。最好是使用setup-ui来创建项目,然后拷贝覆盖iOS项目文件夹至你的项目里,并修改convert.properties文件。
注意:目前Java 1.7 与Android结合有问题。请确保使用Java 1.6。
这部分讲述怎样配置Eclipse在桌面与Android中开发和运行libgdx应用。
创建主工程
- 创建一个新的Java工程: File -> New -> Project -> Java Project. 填写工程名并点击完成.
- 在工程文件夹下创建一个子目录并命名为libs。下载 nightly zip 并将 gdx.jar 和 gdx-sources.jar 放置在libs文件夹下.
- 在Eclipse里, 右键 project -> Refresh. 再次右键 Properties -> Java Build Path -> Libraries -> Add JARs, 选择gdx.jar 点击OK.
- 在 gdx.jar 文件下, 双击 "Source attachment", 单击 Workspace, 选择 gdx-sources.jar 并点击OK.
- 单击 Order and Export 标签, 选择 gdx.jar and 点击 OK.
Note: 第 5 步创建了 gdx.jar 的一个可递依赖。意思就是依赖于主工程的项目类路径里也将同时拥有gdx.jar。然而,这对于Android项目无效。
创建桌面工程
- 创建一个新的Java工程: File -> New -> Project -> Java Project. 填写工程名(eg, "gamename-desktop")并点击完成. (eg, "gamename-desktop") .
- 在工程文件夹下创建一个子目录并命名为libs。下载 nightly zip, 并将 gdx-natives.jar, gdx-backend-lwjgl.jar 和 gdx-backend-lwjgl-natives.jar 放置在libs文件夹下.
- 在Eclipse里, 右键 project-> Refresh. Right click again -> Properties -> Java Build Path -> Libraries -> Add JARs, 选择这三个JARS并点击 OK.
- 单击 Projects 标签, 单击 Add, 选择主工程并单击OK.
创建Android工程
在进行前, 必须先安装 Android SDK
- 创建一个新的Java工程: File -> New -> Project -> Android Project. 填写工程名 (eg, "gamename-android"). 构建目标选择 "Android 1.5". 指定包名(eg, "com.gamename"). 下一页 "Create Activity" 进入 "AndroidGame". 点击完成.
- 在工程文件夹下创建一个子目录并命名为libs。 下载 nightly zip, 并将 gdx-backend-android.jar 和 armeabi 和 armeabi-v7a 文件夹放置在libs文件夹下.
- 在Eclipse里, 右键 project -> Refresh. Right click again -> Properties -> Java Build Path -> Libraries -> Add JARs, 选择 gdx-backend-android.jar 点击 OK.
- 再次单击 Add JARs , 选择主工程下的 gdx.jar 并点击OK.
- 单击 Projects 标签, 点击Add, 选择主工程并点击两次 OK .
- 单击 Order and Export 标签, 选择主工程.
注意:该文件夹必须命名为"libs',这是Android Eclipse插件的命名惯例。
设置 Asset 文件夹
Android 工程有一个自动创建的名为 assets的子文件夹。Android应用可见的文件都必须旋转在该文件夹下。这是有问题的,因为这些文件同时也必须对桌面应用可见。不必手动拷贝两份文件,桌面应用可以配置在Android工程的assets目录下查找文件:
- 点击 Source 标签, 点击Link Source, Browse, 从Android工程中选择 "assets" 文件夹并点击 OK.
- 指定文件夹名为 "assets" 并完成,然后点击OK.
注意: 如果你的桌面和Android应用在同一个父目录下, 你可以使用 "PARENT-1-PROJECT_LOC/gamename-android/assets" 作为 assets文件夹链接的地址,其中 "gamename-android" 是你的Android工程名。如果你打算共享你的工程,那这比硬编码路径要好的多。
创建一个游戏
在主工程里,创建一个新类: 右键工程-> New -> Class. 命名为"Game" 并指定一个包 (eg, "com.gamename"). 下一步Interfaces, 点击 Add, 选择 ApplicationListener, 并点击OK. 新建的类为:
import com.badlogic.gdx.ApplicationListener;
public class Game implements ApplicationListener {
public void create () {
}
public void render () {
}
public void resize (int width, int height) {
}
public void pause () {
}
public void resume () {
}
public void dispose () {
}
}
这些方法允许你创建和渲染你的游戏。因为它们都是空的,当前的游戏将是一个简单的空屏。在做一个更有趣的事情前,先让我们把这个简单的游戏运行起来。
在桌面上运行游戏
右键桌面工程 -> New -> Class. 命名为 DesktopGame 并指定一个包 (eg, "com.gamename"). 点击OK。把类修改为:
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
public class DesktopGame {
public static void main (String[] args) {
new LwjglApplication(new Game(), "Game", 480, 320, false);
}
}
该代码确定一个 LwjglApplication,为游戏提供了一个实例,一个标题和大小。"false" 意思是不使用OpenGL ES 2.0 (将使用 1.0/1.1)。
要在桌面运行游戏, 右键工程 -> Debug As -> Java Application。你会看到一个黑屏标题为 "Game"。
在 Android 中运行游戏
打开Android工程中自动生成的 AndroidGame 类 ,并修改为:
import com.badlogic.gdx.backends.android.AndroidApplication;
public class AndroidGame extends AndroidApplication {
public void onCreate (android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initialize(new Game(), false);
}
}
这个代码是一个Android activity 调用初始化方法并传入一个游戏实例。同样,“false" 意思是不使用OpenGL ES 2.0。
要在Android上运行游戏,右键工程 -> Debug As -> Android Application. 屏幕会变黑, 因为目前游戏没有做任何事情。如果运行应用时有任何错误,都会显示在Logcat视图里,你可以点击 Window -> Show View -> Other -> Android -> Logcat 打开该视图。
更新 libgdx
某些情况下你可能想升级libgdx到最新版本。要做到这一点,再次下载 nightly zip 并更新工程中的这些文件:
Project |
Files |
main |
libs/gdx.jar libs/gdx-sources.jar |
Android |
libs/gdx-backend-android.jar libs/armeabi (directory) libs/armeabi-v7a (directory) |
desktop |
libs/gdx-natives.jar libs/gdx-backend-lwjgl.jar libs/gdx-backend-lwjgl-natives.jar |