簡體   English   中英

libGDX-Android Studio中的Google Play游戲服務

[英]libGDX - Google Play Game Services in Android Studio

從Eclipse遷移到Android Studio之后,我盡力了。 問題是您可以找到的大多數指南和教程都是針對Eclipse的,但是如果您可以找到一個針對Android Studio的指南,則缺少最重要的部分-實現庫或第三方代碼。 經過一周的問題和錯誤后,這里是一個指南

要求:Google Play服務和Google Repostory(在SDK管理器中的Extras下), BaseGameUtils

首先,我們需要添加BaseGameUtils作為模塊: 在此處輸入圖片說明

然后選擇Import Gradle Project並選擇BaseGameUtil文件夾(在此步驟之前,請不要在項目中復制BaseGameUtils。讓Android Studio這樣做)在同步selefct Build> Make Module'BaseGameUtils'之后完成gradle 在此處輸入圖片說明

注意如果您在構建時使用了-sdk:minSdkVersion錯誤,請單擊此處 在此之后再次構建:BaseGameUtils

集成BaseGameUtils的最后一步是將其包含在android模塊中: 在此處輸入圖片說明 之后同步項目。

注意如果在構建時遇到了uses-sdk:minSdkVersion錯誤,這將有所幫助- 鏈接

現在是時候打開您的AndroidManifest文件並包括:

申請標簽前

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

注意:無需在android gradle腳本中添加Google Play依賴項,因為它已經包含在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(android / res / values / Strings.xml)中設置app_id編號

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

您的應用ID位於GooglePlay開發者控制台的“游戲服務”部分(在游戲名稱下)

為了將android本機代碼傳遞給游戲代碼,我們將在核心模塊中創建ActionResolver接口:

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類中進行更改(如果有問題,請檢查導入):

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() {
        if (!gameHelper.isSignedIn()) {
            try {
                runOnUiThread(new Runnable() {
                    public void run() {
                        gameHelper.beginUserInitiatedSignIn();
                    }
                });
            } catch (final Exception ex) {
                Gdx.app.log("MainActivity", "Log in failed: " + ex.getMessage() + ".");
            }
        } else {
            gameHelper.reconnectClient();
        }
    }

    @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() {

    }

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        gameHelper.onActivityResult(requestCode, resultCode, data); 
    }
}

在您的主類(此示例中為MyGame)中創建構造函數:

public ActionResolver resolver;

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

與gplay服務通話:

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

通過以下方式解鎖成就並提交分數:

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

注意:對於每個成就和Leaderbord,請使用在開發人員控制台中找到的相應ID值

並致電排行榜和成就

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

最后,桌面,ios和html啟動器可以用相同的方式解析(例如桌面啟動器)

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM