我有一个可以正常工作的跨平台应用程序,它在 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
- 已将用户库添加到我的项目中。
- 创建了一个名为
libs
的文件夹在我的 RoboVM 项目的根目录中。 - 复制了
iOS
文件夹从 libgdx 文件夹进入libs
包含以下文件:
libgdx.a
和libObjectAL.a
添加了
<libs>
,一个<frameworks>
,以及<forceLinkClasses>
我的项目的 robovm.xml 部分,现在看起来像这样:<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>
将以下代码添加到我的 main 方法中:
IOSApplicationConfiguration cfg = new IOSApplicationConfiguration(); cfg.orientationLandscape = true; cfg.orientationPortrait = true; new IOSApplication(getApplicationListener(), cfg); System.out.println("Should be ready...");
其中getApplicationListener()
返回与我的 LWGJL 应用程序中相同的对象。
create()
该对象中的方法以 System.out.println("Hello?");
开头.
当我运行应用程序时,它会启动(启动图像和所有内容)并开始播放一些声音效果(不使用 LibGDX!),但只显示黑屏。它打印“应该准备好......”,但不打印“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 设置中,这些项目工作正常......
最佳答案
太愚蠢了:
主类必须扩展IOSApplication.Delegate
而不是UIApplicationDelegateAdapter
。
浪费了 6 个小时...这就是为什么我讨厌使用外部库而不是尽可能接近金属的编码(因此我的 earlier question ):对于编写库的人来说,这样一个微不足道的事情会立即变得 self 理解、自动化和被遗忘。因此:没有文档,没有有用的错误消息,没有其他检查和平衡。搜索“libgdx IOSApplication.Delegate”,看看是否可以找到一个页面,说明这就是人们需要做的事情。它唯一出现的地方是在一些示例代码中,您的注意力会立即跳转到方法的内容,而不是您眼角的样板,无论如何,它看起来总是一样......但我会停止在这里...无论如何,只有第二句话与这个答案真正相关...
但是,嘿,我们终于详细描述了如何在不使用 Gradle 的情况下将 LibGDX 添加到 RoboVM 中的现有项目...
关于java - 在没有 Gradle 的 RoboVM 上设置 LibGDX(仅出现黑屏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866024/