Java Libgdx 正确省略了 gwt 构建的类引用
Posted
技术标签:
【中文标题】Java Libgdx 正确省略了 gwt 构建的类引用【英文标题】:Java Libgdx properly omit class references for gwt build 【发布时间】: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 构建。 【参考方案1】:如果可以的话,让它成为一个运行时问题并使用if(Gdx.app.getType() == ApplicationType.WebGL)
或isLocalStorageAvailable()
。
似乎计划支持本地存储 - “首选项和本地文件,很可能通过 Web 存储 API 实现。” http://www.badlogicgames.com/wordpress/?p=2308 但我猜它还没有实现。
您总是可以编写一些使用GWT to access HTML5 local storage 的platform specific code,甚至可以自己更新backend。
【讨论】:
这个函数的具体问题是:public Array<String> getList(String dir) Array<String> files = new Array<String>(); FileHandle dirHandle; if(Gdx.files.isLocalStorageAvailable()) dirHandle = Gdx.files.local(base+"/"+dir); for (FileHandle entry : dirHandle.list()) if(!(Gdx.app.getType() == ApplicationType.WebGL)) String fileName = entry.file().getName(); files.add(fileName); return files;
即使进行了两次检查,构建仍然会中断。但是,如果我用 entry.file().getName()
注释掉该行,那么它就会构建。
实际错误是什么?不是只说错误的那一行,(希望)应该列出一个原因。再次阅读平台特定代码网页。如果你为你的 FileManager 做一个界面,然后只把当前的 FileManager 放在你的桌面/安卓项目中,你应该没问题。您只需要为您的 Web 项目创建一个没有问题代码的 FileManager。以上是关于Java Libgdx 正确省略了 gwt 构建的类引用的主要内容,如果未能解决你的问题,请参考以下文章
LibGDX - 将跨平台客户端连接到服务器(HTML5/GWT、iOS、Android 和桌面)