且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

libGDX - 谷歌Play游戏服务Android Studio中

更新时间:2023-01-01 11:14:58

要求:谷歌(SDK中的额外经理下),发挥服务和谷歌Repostory,的 BaseGameUtils

Requirements: Google play services and Google Repostory (under Extras in SDK manager), BaseGameUtils

首先,我们需要添加BaseGameUtils的模块:
libGDX  - 谷歌Play游戏服务Android Studio中

Firstly we need to add BaseGameUtils as Module:

然后选择导入摇篮项目,并选择BaseGameUtil文件夹(在项目步骤之前,不要复制BaseGameUtils,让Android的工作室做到这一点)
gradle这个与同步selefct构建完成后>使模块'BaseGameUtils
libGDX  - 谷歌Play游戏服务Android Studio中

then select Import Gradle Project and chose BaseGameUtil folder (do not copy BaseGameUtils in project before that step. Let Android Studio do that) After gradle is done with syncing selefct Build > Make Module 'BaseGameUtils'

有关integranting BaseGameUtils最后一步是把它列入到机器人模块:
libGDX  - 谷歌Play游戏服务Android Studio中
同步项目之后。

Last step for integranting BaseGameUtils is to include it into android module: Sync project afterwards.

现在是时候打开你的Andr​​oidManifest文件,包括:

Now it's time to open your AndroidManifest file and include:

之前的应用程序的标签

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

注意:有没有必要加入谷歌扮演的gradle的android脚本依赖becouse它已经包含在BaseGameUtils

NOTE: there is no need to add google play dependencies in android gradle script becouse it is already included in BaseGameUtils

应用的,之前的活动

 <meta-data android:name="com.google.android.gms.games.APP_ID"
            android:value="@string/app_id" />
 <meta-data android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

现在,你需要设置Srtings APP_ID电话(Android / RES /价值/ strings.xml中)

Now you need to set app_id number in Srtings (android/res/values/Strings.xml)

  <string name="app_id">928019648708</string>

您的应用程序ID位于下游戏服务节GOOGLEPLAY开发者控制台(下游戏名)

Your app id is located in GooglePlay developer console under Game Services section (under game name)

有关通过Android原生code到游戏code,我们将创建核心模块ActionResolver接口:

For passing android native code to game code we will create ActionResolver interface in core module:

package com.mygame.test;

public interface ActionResolver {
    public boolean getSignedInGPGS();
    public void loginGPGS();
    public void submitScoreGPGS(int score, String id);
    public void unlockAchievementGPGS(String achievementId);
    public void getLeaderboardGPGS();
    public void getAchievementsGPGS();
}

现在,我们需要在AndroidLauncher类(检查进口如果你有问题)的变化:

Now we need to make changes in AndroidLauncher class (check imports if you have problems):

package com.mygame.test.android;

import android.os.Bundle;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.google.android.gms.games.Games;
import com.google.example.games.basegameutils.GameHelper;
import com.mygame.test.ActionResolver;
import com.mygame.test.MyGame;

public class AndroidLauncher extends AndroidApplication implements ActionResolver, GameHelper.GameHelperListener {

    private GameHelper gameHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (gameHelper == null) {
            gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);
            gameHelper.enableDebugLog(true);
        }
        gameHelper.setup(this);

        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        initialize(new MyGame(this), config);
    }

    @Override
    public boolean getSignedInGPGS() {
        return gameHelper.isSignedIn();
    }

    @Override
    public void loginGPGS() {
        try {
            runOnUiThread(new Runnable() {
                public void run() {
                    gameHelper.beginUserInitiatedSignIn();
                }
            });
        } catch (final Exception ex) {
            Gdx.app.log("MainActivity", "Log in failed: " + ex.getMessage() + ".");
        }
    }

    @Override
    public void submitScoreGPGS(int score, String id) {
        Games.Leaderboards.submitScore(gameHelper.getApiClient(), id, score);
    }

   @Override
    public void unlockAchievementGPGS(String achievementId) {
        Games.Achievements.unlock(gameHelper.getApiClient(), achievementId);
    }

    @Override
    public void getLeaderboardGPGS() {
        if (gameHelper.isSignedIn()) {
            startActivityForResult(Games.Leaderboards.getLeaderboardIntent(gameHelper.getApiClient(), "CgkI5MyZk4FbHAJQXQ"), 100);
        } else if (!gameHelper.isConnecting()) {
            loginGPGS();
        }
    }

    @Override
    public void getAchievementsGPGS() {
        if (gameHelper.isSignedIn()) {
            startActivityForResult(Games.Achievements.getAchievementsIntent(gameHelper.getApiClient()), 101);
        } else if (!gameHelper.isConnecting()) {
            loginGPGS();
        }

    }

    @Override
    public void onSignInFailed() {
        gameHelper.getSignInError();
    }

    @Override
    public void onSignInSucceeded() {

    }
}

在主类中创建的构造函数(在这个例子中MyGame):

Create constructor in your main class (MyGame in this example):

public ActionResolver resolver;

public Base(ActionResolver ar) {
    resolver = ar;
}

与gplay业务的呼叫连接:

to connect with gplay services call:

if (!resolver.getSignedInGPGS())
    resolver.loginGPGS();

解锁成就,并提交成绩:

unlock achievements and submit scores with:

if (resolver.getSignedInGPGS()){
    if (currentScore == 0){
        resolver.unlockAchievementGPGS("CgkI5MyZk4EbEAIQAg");
    }
    if (Cookie.bestScore >= 100){
        resolver.unlockAchievementGPGS("CgkI5MyZk4EbEAIQAw");
    }
    resolver.submitScoreGPGS(Cookie.bestScore, "CgkI5MyZk4EbEAIQAQ");
}

注:对应的ID valuses用在开发者控制台中发现的每个成就和leaderbord

和调用排行榜和成就与

resolver.getLeaderboardGPGS();
resolver.getAchievementsGPGS();

最后桌面,iOS和HTML发射可以以同样的方式(例如桌面启动器)来解决。

Lastly desktop, ios and html launcher can be resolved in the same way (example for desktop launcher)

public static void main (String[] arg) {
    LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();

    ActionResolver resolver= new ActionResolver() {
        @Override
        public boolean getSignedInGPGS() {
            return false;
        }
        @Override
        public void loginGPGS() {
        }
        @Override
        public void submitScoreGPGS(int score, String id) {
        }
        @Override
        public void unlockAchievementGPGS(String achievementId) {
        }
        @Override
        public void getLeaderboardGPGS() {
        }
        @Override
        public void getAchievementsGPGS() {
        }
    };
    new LwjglApplication(new MyGame(resolver), config);
}