有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在没有Gradle的RoboVM上设置LibGDX(仅获取黑屏)

我有一个在RoboVM下运行良好的跨平台应用程序。我开始将应用程序的图形后端移到LibGDX。在LWJGL下一切正常,但我无法让LibGDX在RoboVM上工作

我真的不想再安装和学习另一个构建工具或依赖关系管理工具,所以我希望在不必使用Gradle的情况下让它正常工作

以下是我到目前为止所做的:

  • releases directory下载了最新的LibGDX版本(1.6.1)
  • 将zip文件解压到我计算机上的某个目录中(不在我的Eclipse项目中)
  • 在Eclipse中创建了一个新的用户库,其中包含以下文件夹中的外部JAR:
    gdx.jargdx-backend-robovm.jargdx-natives.jar
  • 已将用户库添加到我的项目中
  • 在我的RoboVM项目的根目录中创建了一个名为libs的文件夹
  • iOS文件夹从libgdx文件夹复制到包含以下文件的libs中:
    libgdx.alibObjectAL.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) 个答案

  1. # 1 楼答案

    太愚蠢了:

    主类必须扩展IOSApplication.Delegate,而不是UIApplicationDelegateAdapter

    浪费了6个小时。。。这就是为什么我讨厌使用外部库而不是尽可能接近金属编码(因此我的earlier question):对于编写库的人来说,这样一件小事会立即被自我理解、自动化和遗忘。因此:没有文档,没有有用的错误消息,没有其他检查和平衡。搜索“libgdx IOSApplication.Delegate”,看看是否能找到一个页面,上面写着这是一个人需要做的事情。它唯一出现的地方是在一些示例代码中,您的注意力立即转移到方法的内容上,而不是从眼角看出来的样板文件,反正看起来都是一样的。。。但我就到此为止。。。无论如何,只有第二句话与这个答案真正相关

    但是,嘿,我们终于详细描述了如何在不使用Gradle的情况下将LibGDX添加到RoboVM中的现有项目中