在没有 Gradle 的情况下在 RoboVM 上设置 LibGDX(仅黑屏)
Setting up LibGDX on RoboVM without Gradle (getting black screen only)
我有一个工作的跨平台应用程序,在 RoboVM 下总是 运行 正常。我开始将应用程序的图形后端移至 LibGDX。在 LWJGL 下一切 运行 都很好,但我无法 LibGDX 在 RoboVM 上工作。
我真的不想安装和学习另一个构建工具或依赖管理的东西,所以我想让它工作 而 不必使用 Gradle.
这是我目前所做的:
- 已从 releases directory 下载最新的 LibGDX 版本 (1.6.1)。
- 将 zip 文件解压缩到我计算机上的某个目录中(不在我的 Eclipse 项目中)。
- 在 Eclipse 中创建了一个新的用户库,其中包含以下文件夹中的这些外部 jar:
gdx.jar
、gdx-backend-robovm.jar
和 gdx-natives.jar
- 将用户库添加到我的项目中。
- 在我的 RoboVM 项目的根目录中创建了一个名为
libs
的文件夹。
- 已将
iOS
文件夹从 libgdx 文件夹复制到 libs
,其中包含以下文件:
libgdx.a
和 libObjectAL.a
在我的项目 robovm.xml 中添加了一个 <libs>
、一个 <frameworks>
和一个 <forceLinkClasses>
部分,现在看起来像这样:
<config>
<executableName>${app.executable}</executableName>
<mainClass>${app.mainclass}</mainClass>
<os>ios</os>
<arch>thumbv7</arch>
<resources>
<resource>
<directory>resources</directory>
<skipPngCrush>true</skipPngCrush>
</resource>
</resources>
<libs>
<lib>libs/ios/libgdx.a</lib>
<lib>libs/ios/libObjectAL.a</lib>
</libs>
<frameworks>
<framework>UIKit</framework>
<framework>OpenGLES</framework>
<framework>QuartzCore</framework>
<framework>CoreGraphics</framework>
<framework>OpenAL</framework>
<framework>AudioToolbox</framework>
<framework>AVFoundation</framework>
</frameworks>
<forceLinkClasses>
<pattern>com.badlogix.gdx.scenes.scene2d.ui.*</pattern>
</forceLinkClasses>
<target>ios</target>
<iosInfoPList>Info.plist.xml</iosInfoPList>
</config>
在我的主要方法中添加了以下代码:
IOSApplicationConfiguration cfg = new IOSApplicationConfiguration();
cfg.orientationLandscape = true;
cfg.orientationPortrait = true;
new IOSApplication(getApplicationListener(), cfg);
System.out.println("Should be ready...");
其中 getApplicationListener()
returns 与我的 LWGJL 应用程序中的对象相同。
此对象中的 create()
方法以 System.out.println("Hello?");
.
开头
当我 运行 应用程序时,它启动(启动图像和所有)并开始播放一些声音效果(不使用 LibGDX!)但只显示黑屏。它打印 "Should be ready..." 但不打印 "Hello?"。因此,ApplicationListener
可以正常创建,IOSApplication
也可以正常创建,但是永远不会调用侦听器的 create()
方法。与往常一样,没有有用的(或任何与此相关的)错误消息...
我是不是漏掉了什么???
我非常确定 .a 文件包含在构建中,因为一旦我将 <libs>
部分添加到 robovm.xml,我就被构建错误淹没了我还添加了 <frameworks>
部分。我需要担心其他一些导出设置吗?有没有办法至少得到某种错误或日志消息?
更新:
如果我在模拟器中运行它,我也会黑屏。但是如果我点击黑屏,我会收到以下错误信息:
unexpected nil window in _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: <UIClassicWindow: 0x7fafa27175b0; frame = (0 0; 375 667); userInteractionEnabled = NO; gestureRecognizers = <NSArray: 0x7fafa2514d70>; layer = <UIWindowLayer: 0x7fafa2718060>>
我将 LibGDX 测试项目导入到我的 Eclipse/RoboVM 设置中并且工作正常...
太蠢了:
主要 class 必须扩展 IOSApplication.Delegate
而不是 UIApplicationDelegateAdapter
。
浪费了 6 个小时......这就是为什么我讨厌使用外部库而不是尽可能接近金属的编码(因此我的 ):对于编写库的人来说,这样的琐碎的事情会立即变得自我理解、自动化和遗忘。因此:没有文档,没有有用的错误消息,没有其他检查和平衡。搜索“libgdx IOSApplication.Delegate”,看看您是否可以找到一个页面,上面写着这是您需要做的事情。它出现的唯一地方是在一些示例代码中,您的注意力会立即跳到方法的内容上,而不是从您的眼角看去与往常一样的样板……但我会停下来在这里...无论如何只有第二句话与这个答案真正相关...
但是,嘿,我们终于详细描述了如何在不使用 Gradle 的情况下将 LibGDX 添加到 RoboVM 中的现有项目...
我有一个工作的跨平台应用程序,在 RoboVM 下总是 运行 正常。我开始将应用程序的图形后端移至 LibGDX。在 LWJGL 下一切 运行 都很好,但我无法 LibGDX 在 RoboVM 上工作。
我真的不想安装和学习另一个构建工具或依赖管理的东西,所以我想让它工作 而 不必使用 Gradle.
这是我目前所做的:
- 已从 releases directory 下载最新的 LibGDX 版本 (1.6.1)。
- 将 zip 文件解压缩到我计算机上的某个目录中(不在我的 Eclipse 项目中)。
- 在 Eclipse 中创建了一个新的用户库,其中包含以下文件夹中的这些外部 jar:
gdx.jar
、gdx-backend-robovm.jar
和gdx-natives.jar
- 将用户库添加到我的项目中。
- 在我的 RoboVM 项目的根目录中创建了一个名为
libs
的文件夹。 - 已将
iOS
文件夹从 libgdx 文件夹复制到libs
,其中包含以下文件:
libgdx.a
和libObjectAL.a
在我的项目 robovm.xml 中添加了一个
<libs>
、一个<frameworks>
和一个<forceLinkClasses>
部分,现在看起来像这样:<config> <executableName>${app.executable}</executableName> <mainClass>${app.mainclass}</mainClass> <os>ios</os> <arch>thumbv7</arch> <resources> <resource> <directory>resources</directory> <skipPngCrush>true</skipPngCrush> </resource> </resources> <libs> <lib>libs/ios/libgdx.a</lib> <lib>libs/ios/libObjectAL.a</lib> </libs> <frameworks> <framework>UIKit</framework> <framework>OpenGLES</framework> <framework>QuartzCore</framework> <framework>CoreGraphics</framework> <framework>OpenAL</framework> <framework>AudioToolbox</framework> <framework>AVFoundation</framework> </frameworks> <forceLinkClasses> <pattern>com.badlogix.gdx.scenes.scene2d.ui.*</pattern> </forceLinkClasses> <target>ios</target> <iosInfoPList>Info.plist.xml</iosInfoPList> </config>
在我的主要方法中添加了以下代码:
IOSApplicationConfiguration cfg = new IOSApplicationConfiguration(); cfg.orientationLandscape = true; cfg.orientationPortrait = true; new IOSApplication(getApplicationListener(), cfg); System.out.println("Should be ready...");
其中 getApplicationListener()
returns 与我的 LWGJL 应用程序中的对象相同。
此对象中的 create()
方法以 System.out.println("Hello?");
.
当我 运行 应用程序时,它启动(启动图像和所有)并开始播放一些声音效果(不使用 LibGDX!)但只显示黑屏。它打印 "Should be ready..." 但不打印 "Hello?"。因此,ApplicationListener
可以正常创建,IOSApplication
也可以正常创建,但是永远不会调用侦听器的 create()
方法。与往常一样,没有有用的(或任何与此相关的)错误消息...
我是不是漏掉了什么???
我非常确定 .a 文件包含在构建中,因为一旦我将 <libs>
部分添加到 robovm.xml,我就被构建错误淹没了我还添加了 <frameworks>
部分。我需要担心其他一些导出设置吗?有没有办法至少得到某种错误或日志消息?
更新:
如果我在模拟器中运行它,我也会黑屏。但是如果我点击黑屏,我会收到以下错误信息:
unexpected nil window in _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: <UIClassicWindow: 0x7fafa27175b0; frame = (0 0; 375 667); userInteractionEnabled = NO; gestureRecognizers = <NSArray: 0x7fafa2514d70>; layer = <UIWindowLayer: 0x7fafa2718060>>
我将 LibGDX 测试项目导入到我的 Eclipse/RoboVM 设置中并且工作正常...
太蠢了:
主要 class 必须扩展 IOSApplication.Delegate
而不是 UIApplicationDelegateAdapter
。
浪费了 6 个小时......这就是为什么我讨厌使用外部库而不是尽可能接近金属的编码(因此我的
但是,嘿,我们终于详细描述了如何在不使用 Gradle 的情况下将 LibGDX 添加到 RoboVM 中的现有项目...