【发布时间】:2014-03-25 16:35:50
【问题描述】:
我正在使用 libgdx 开发 Java 游戏,我将其部署到我拥有的网络服务器以及 google play 市场。
使用 libgdx 处理部署,它的设置与所有 libgdx 项目一样:
游戏 - 主游戏代码
game-android - 用于 android 构建
game-html - 用于 gwt 构建
游戏允许用户保存和加载项目,以及截屏。由于 html5 无法访问任何实际的文件系统,因此在构建 game-html 版本时,我无法以相同的方式使用这些功能。
我创建了一个名为 FileManager 的类,它在主游戏代码类中实例化。它处理所有与文件系统相关的东西。
当我为 game-html 构建时,我必须通过引用 FileManager 类的 4 或 5 个其他类并将这些行注释掉。我这样做是为了防止 gwt 构建抛出错误。
当您的游戏代码类之一使用 Gdx.files.local 时,处理 GWT 构建的正确方法是什么?
感谢您的帮助!
【问题讨论】:
-
你不能只在你的游戏代码中传递一个参数来确定它是否是 GWT 运行吗?如果参数表明它是 GWT,那么就避免使用 FileManager 的东西。这类似于根据您使用的是桌面设备还是 Android 设备来更改正在使用的输入。
-
我尝试了类似的方法,但在构建过程中似乎被忽略了。我这样做了:当我加载游戏代码时,我传入一个带有设备名称的字符串。所以如果它是 android 字符串是 "android", 也可以是 "desktop" 或 "gwt" 然后我在游戏代码的 create() 方法中尝试这个: if(!device.equals("gwt")){ this.files = 新文件管理器(这个); }
-
如果您已经尝试过,能否发布一些示例代码以及您遇到的确切错误?
-
这正是我尝试过的方法以及我从 GWT 构建中得到的错误。我声明了一个可以是“desktop”、“android”或“gwt”的字符串。我在实例化 FileManager 类(其中包含 gwt 最终中断的 FileHandle 对象)之前检查了该字符串。我像这样检查它:` if(!device.equals("gwt")){ this.files = new FileManager(this); } ` 然后我得到这个错误:GWT 编译失败。当我向上滚动输出日志时,我最终找到了罪魁祸首:`[ERROR] Errors in 'file:/C:/Users/***//SuperContraption/supercontraption/src/supercontraption/FileManager.java' `
-
这就是 FileManager 中创建 FileHandle 对象的那一行。因此,似乎在创建 FileManager 对象之前检查该字符串并不能阻止它破坏 gwt 构建。