[英]libGDX - Google Play Game Services in Android Studio
從Eclipse遷移到Android Studio之后,我盡力了。 問題是您可以找到的大多數指南和教程都是針對Eclipse的,但是如果您可以找到一個針對Android Studio的指南,則缺少最重要的部分-實現庫或第三方代碼。 經過一周的問題和錯誤后,這里是一個指南
要求:Google Play服務和Google Repostory(在SDK管理器中的Extras下), 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.