java - 在没有 Gradle 的 RoboVM 上设置 LibGDX(仅出现黑屏)

标签 java eclipse 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
  • 已将用户库添加到我的项目中。
  • 创建了一个名为 libs 的文件夹在我的 RoboVM 项目的根目录中。
  • 复制了iOS文件夹从 libgdx 文件夹进入 libs包含以下文件:
        libgdx.alibObjectAL.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/

相关文章:

使用 AXIS2 运行 web 服务时,tomcat 服务器日志中的 java.lang.ClassCastException

java - 如何使用 Stream 拆分集合中的奇数和偶数以及两者的总和

eclipse - 无法在从Scala-IDE调用的 'yarn-client'模式下初始化SparkContext

eclipse - 在 Eclipse 中更改 Tomcat 服务器的超时

java.lang.AssertionError : Status 404

java - 使用集合的集合生成 XML

php调试

android - LibGDX:一个有 20 个可以滚动的矩形的屏幕

android - 使用 OpenGL ES 将视觉效果应用于图像

java - libgdx 源代码构建错误无法解析为类型