简体   繁体   English

libGDX-Android Studio中的Google Play游戏服务

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

After migrating to Android Studio from Eclipse, I was struggling at best with it. 从Eclipse迁移到Android Studio之后,我尽力了。 Problem was that most guides and tutorials you could find are for Eclipse , but if you can find one for Android Studio, it is missing most important parts - implementing libraries or 3rd party code. 问题是您可以找到的大多数指南和教程都是针对Eclipse的,但是如果您可以找到一个针对Android Studio的指南,则缺少最重要的部分-实现库或第三方代码。 After week of problems and errors here is a guide 经过一周的问题和错误后,这里是一个指南

Requirements: Google play services and Google Repostory (under Extras in SDK manager), BaseGameUtils 要求:Google Play服务和Google Repostory(在SDK管理器中的Extras下), BaseGameUtils

Firstly we need to add BaseGameUtils as Module: 首先,我们需要添加BaseGameUtils作为模块: 在此处输入图片说明

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' 然后选择Import Gradle Project并选择BaseGameUtil文件夹(在此步骤之前,请不要在项目中复制BaseGameUtils。让Android Studio这样做)在同步selefct Build> Make Module'BaseGameUtils'之后完成gradle 在此处输入图片说明

NOTE if u have uses-sdk:minSdkVersion error while build check this click here . 注意如果您在构建时使用了-sdk:minSdkVersion错误,请单击此处 Build :BaseGameUtils again after this 在此之后再次构建:BaseGameUtils

Last step for integranting BaseGameUtils is to include it into android module: 集成BaseGameUtils的最后一步是将其包含在android模块中: 在此处输入图片说明 Sync project afterwards. 之后同步项目。

NOTE if you get uses-sdk:minSdkVersion error while build this will help - link 注意如果在构建时遇到了uses-sdk:minSdkVersion错误,这将有所帮助- 链接

Now it's time to open your AndroidManifest file and include: 现在是时候打开您的AndroidManifest文件并包括:

before application tag 申请标签前

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

NOTE: there is no need to add google play dependencies in android gradle script becouse it is already included in BaseGameUtils 注意:无需在android gradle脚本中添加Google Play依赖项,因为它已经包含在BaseGameUtils中

in application , before activity 申请前, 活动

 <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" />

Now you need to set app_id number in Srtings (android/res/values/Strings.xml) 现在您需要在Srtings(android / res / values / Strings.xml)中设置app_id编号

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

Your app id is located in GooglePlay developer console under Game Services section (under game name) 您的应用ID位于GooglePlay开发者控制台的“游戏服务”部分(在游戏名称下)

For passing android native code to game code we will create ActionResolver interface in core module: 为了将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();
}

Now we need to make changes in AndroidLauncher class (check imports if you have problems): 现在,我们需要在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); 
    }
}

Create constructor in your main class (MyGame in this example): 在您的主类(此示例中为MyGame)中创建构造函数:

public ActionResolver resolver;

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

to connect with gplay services call: 与gplay服务通话:

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

note: use corresponding id valuses found in developer console for each achievement and for leaderbord 注意:对于每个成就和Leaderbord,请使用在开发人员控制台中找到的相应ID值

and call leaderboards and achievements with 并致电排行榜和成就

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

Lastly desktop, ios and html launcher can be resolved in the same way (example for desktop launcher) 最后,桌面,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