GWT-libGDX平台特定代码



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

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

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

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

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

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上实现。

最新更新