【问题标题】:GWT-libGDX platform specific codeGWT-libGDX 平台特定代码
【发布时间】:2018-03-02 17:51:24
【问题描述】:

我目前正在使用 libGDX 开发一款跨平台游戏。我想根据我所在的平台编译代码。 例如如果我使用 GWT 编译它应该选择 Class.js.java,当使用 Java 正常运行时它应该选择 Class.java。 这可能吗?

【问题讨论】:

    标签: java gwt libgdx


    【解决方案1】:

    我相信您指的是 GWT 的“超级源”功能,它允许您在为 GWT 编译时用替代源代替类。

    有关其工作原理的详细信息,请参阅标题为“用另一个包实现覆盖一个包实现”部分中的 documentation

    【讨论】:

    • 谢谢 :D 这正是我想要的!
    【解决方案2】:

    这当然是可能的。你可以创建一个接口契约,每个模块都应该实现它。

    在您的核心模块中创建接口,因为它需要与其他模块共享。

    public interface MultiPlatformContract {
        String whatPlatform();
    }
    

    您还可以为您的主要核心类创建一个构造函数,并在其中将此实现作为参数添加。我只是在这里调用它,但您可以存储它,将它传递给其他对象并稍后调用它的任何方法。

    public MultiPlatformGame(MultiPlatform multiPlatformContract)
    {
        System.out.println(multiPlatform.whatPlatform());
    }
    

    一旦您将此合同添加到构造函数,您的所有模块显然都会失败,因为您需要为其构造函数提供实现。因此,我们为要为其开发的每个模块创建一个实现。您可以在核心中创建它,但在特定模块中创建它更有意义,因为每个模块都应该为自己的目的使用一个。

    public class DesktopPlatform implements MultiPlatformContract {    
        public String whatPlatform() {
            return "I run on desktop."
        }
    }
    

    在您实例化游戏的每个平台模块的主类/入口点中,您现在遇到错误,因为您需要向构造函数提供MultipPlatformContract。在桌面上,我将合同的桌面实现传递给它。

    public static void main (String[] arg) {
        new LwjglApplication(new LibGdxTest(new DesktopPlatform()), config);
    }
    

    就是这样。这主要用于访问不同的 API。就像 Steam API 应该从桌面访问,Google Play 应该在 Android 上实现。

    【讨论】:

    • 感谢您的帮助!
    • 但我相信现在这将解决我的问题。问题是我的 Java 代码编译得很好,但不能用 GWT for html 编译。所以我需要某种条件编译(如果 GWT 编译文件 A,否则编译文件 B)。我可以调整我的代码,使其使用 GWT 编译,但这种解决方法对于 Java 来说效率低下。总而言之,我需要 Java 的高效代码,以及 GWT 的低效解决方法
    • 它基本上是关于 instanceof 函数,它不能在 GWT 上编译但需要一些解决方法
    • @orestiszambounis 你没有任何意义。平台特定代码进入相应的模块。特定模块仅针对该特定平台进行编译。
    • 听着,你带着一个问题来到这里,但你已经偏向于某种骇人听闻的方法。我只是给了你一个合适的解决方案,但你不想使用它。对我来说一切都很好,但是不要那样做cmets。我投入了时间和精力来帮助您,您至少可以尊重这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多