【问题标题】:Setting up LibGDX on RoboVM without Gradle (getting black screen only)在没有 Gradle 的 RoboVM 上设置 LibGDX(仅黑屏)
【发布时间】:2015-10-30 04:58:50
【问题描述】:

我有一个可以在 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.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>
    
  • 在我的 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!)但只是显示黑屏。它打印“Should be ready...”,但不打印“Hello?”。因此,ApplicationListener 可以正常创建,IOSApplication 可以正常创建,但永远不会调用侦听器的 create() 方法。与往常一样,没有任何有用的(或任何与此相关的)错误消息...

我错过了什么吗???

我很确定 .a 文件已包含在构建中,因为一旦我将 &lt;libs&gt; 部分添加到 robovm.xml 中,我就会被构建错误淹没,这些错误在我添加&lt;frameworks&gt; 部分。还有其他一些我需要担心的导出设置吗?有没有办法至少得到某种错误或日志消息?

更新

如果我在模拟器中运行它,我也会出现黑屏。但是如果我点击黑屏,我会收到以下错误消息:

unexpected nil window in _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: <UIClassicWindow: 0x7fafa27175b0; frame = (0 0; 375 667); userInteractionEnabled = NO; gestureRecognizers = <NSArray: 0x7fafa2514d70>; layer = <UIWindowLayer: 0x7fafa2718060>>

我将 LibGDX 测试项目导入到我的 Eclipse/RoboVM 设置中,并且工作正常...

【问题讨论】:

    标签: java eclipse libgdx robovm


    【解决方案1】:

    太傻了:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 2013-07-05
      • 2013-07-07
      • 2015-01-23
      • 1970-01-01
      相关资源
      最近更新 更多