java在没有Gradle的RoboVM上设置LibGDX(仅获取黑屏)
我有一个在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中添加了一个
<libs>
、一个<frameworks>
和一个<forceLinkClasses>
部分。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>
将以下代码添加到我的主方法中:
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!)但只是显示一个黑屏。它显示“应该准备好了…”但它不打印“你好吗?”。因此,ApplicationListener
创建得很好,IOSApplication
创建得很好,但是监听器的create()
方法从未被调用。和往常一样,没有任何有用的(或任何相关的)错误消息
我错过什么了吗
我相当肯定,这一点。一个文件被包含在构建中,因为我一向robovm添加<libs>
部分。当我添加了<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设置中,这些项目运行良好
# 1 楼答案
太愚蠢了:
主类必须扩展
IOSApplication.Delegate
,而不是UIApplicationDelegateAdapter
浪费了6个小时。。。这就是为什么我讨厌使用外部库而不是尽可能接近金属编码(因此我的earlier question):对于编写库的人来说,这样一件小事会立即被自我理解、自动化和遗忘。因此:没有文档,没有有用的错误消息,没有其他检查和平衡。搜索“libgdx IOSApplication.Delegate”,看看是否能找到一个页面,上面写着这是一个人需要做的事情。它唯一出现的地方是在一些示例代码中,您的注意力立即转移到方法的内容上,而不是从眼角看出来的样板文件,反正看起来都是一样的。。。但我就到此为止。。。无论如何,只有第二句话与这个答案真正相关
但是,嘿,我们终于详细描述了如何在不使用Gradle的情况下将LibGDX添加到RoboVM中的现有项目中