Google 使用 libGDX 玩游戏服务

Google Play Game Services with libGDX

我已尝试将 Google Play 游戏服务与我的 libGDX 项目集成。

我在MainGame中使用过这段代码class:

public static PlayServices playServices;

public MainGame(PlayServices playServices)
{
    this.playServices = playServices;
}

我将此代码放在 MainMenu class 中,我想在一些用户交互后显示登录 Google 的登录表单。

public static MainGame game;

public MainMenu(MainGame game)
{
    this.game = game;
}

当我尝试 运行 应用程序时,出现以下错误:

Error:(77, 68) error: constructor MainMenu in class MainMenu cannot be applied to given types; required: MainGame found: no arguments reason: actual and formal argument lists differ in length

我猜你正试图从 Android 模块发送一个 PlayServices 实例到你的核心模块。如果不是这种情况,请更正我并提供更多代码,因为我无法从您提供的信息中得出任何其他信息。

您需要使用一个接口。

在你的核心模块中创建一个接口。它具有必要的功能,如 connectToGooglePlayServices()、unlockAchivement() 等。所有 Android.

独有的东西
public class AndroidLauncher extends AndroidApplication implements ThatInterfaceClass {
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        initialize(new MyGdxGame(this), config);
    }
    @Override
    public void connectToGooglePlayServices() {
        //connect to play services here
    }

    @Override
    public void unlockAchivement() {
        // unlock achivement etc.
    }

}

这里重要的部分是将其作为 MyGdxGame class 构造函数的参数,并实现 ThatInterfaceClass.

在此之后将参数放入您的 MyGdxGame class' 构造函数中。

public class MyGdxGame extends ApplicationAdapter {
    public void MyGdxGame (ThatInterfaceClass interface) {
        this.interface = interface;
    }

    // create etc... Other functions....
}

现在为了连接到 google 播放服务或解锁成就只需调用 interface.connectToGooglePlayServices()

这里有一个 link 可以更好地解释这一点。

https://github.com/libgdx/libgdx/wiki/Interfacing-with-platform-specific-code

编辑: 看来问题出在您未在此处提供的代码中。看看这个你应该如何创造的例子 e MainMenu class.

的实例
MainGame mainGame = new MainGame(playServices);
MainMenu mainMenu = new MainMenu(mainGame);

我相信你是这样构建 MainMenu class:

MainMenu mainMenu = new MainMenu();

只要你有这个构造函数:

public MainGame(PlayServices playServices)
{
    this.playServices = playServices;
}

您不能在没有 PlayServices 参数的情况下使用构造函数。但是您可以删除您的构造函数或删除 PlayServices 参数并像这样使用它:

MainMenu mainMenu = new MainMenu();
mainMenu.setPlayServices(playServices);

这里还有一个和你一样的问题:

"Actual or formal argument lists differs in length"

编辑 2: android 模块 中的 MainMenu class 是 核心模块?如果它不在 android 模块 中,则您不能使用 PlayServices class(也不能有实例)。也不要寻找解决方法,只需使用接口来启动连接。正如我在最初的回答中所说。

编辑 3:最终版本: 如果您之前已经介绍过该教程,对我们双方来说可能会更容易。 您在评论中发送的图片显示无法解析 playServices:

  1. 确保您没有输入任何错误内容。

  2. 确保PlayServices接口在核心模块中。

  3. 再读一遍教程。确保您正确添加了库、依赖项等。

  4. 教程告诉您创建 AndroidLauncher activity。但是 libGdx 默认创建它。

除此之外,如果不坐在你的椅子上,我无法进一步帮助你。对于您的下一个问题,请提供更多信息。还有很多。