2015-10-07 129 views
2

從Eclipse遷移到Android Studio後,我一直在努力。問題是你可以找到的大多數指南和教程都是針對Eclipse的,但是如果你能找到一個適用於Android Studio的指南和教程,它會丟失最重要的部分 - 實現庫或第三方代碼。這裏的問題和錯誤周後是一個指導libGDX - Android Studio中的Google Play遊戲服務

+0

無意冒犯,但你應該將答案作爲教程發佈到您的網站,博客或其他地方,但不是這樣的。 –

+0

我知道它會更好,但我沒有一個頁面。最後,如果我用這個保存任何人幾個小時沒關係 – raco

回答

5

要求:谷歌(在SDK管理器附加功能下)發揮服務和谷歌Repostory,BaseGameUtils

首先,我們需要添加BaseGameUtils爲模塊: enter image description here

然後選擇Import Gradle Project並選擇BaseGameUtil文件夾(在該步驟之前不要複製BaseGameUtils,讓Android Studio執行此操作) Gradle完成同步選擇後Build> Make Module'BaseGameUtils' enter image description here

注意如果你有使用sdk:minSdkVersion錯誤,而建立檢查這click here。構建:後再次BaseGameUtils這

爲integranting BaseGameUtils最後一步是把它列入到機器人模塊: enter image description here 同步項目之後。

注意如果你使用-SDK:的minSdkVersion錯誤,而建設,這將幫助 - link

現在是時候打開你的AndroidManifest文件,包括:

應用標籤

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

注意:有沒有必要添加谷歌播放依賴關係becouse它的Android gradle這個腳本已經包含在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(安卓/ RES APP_ID數/值/字符串。XML)

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

注意:在開發者控制檯中使用相應的id值,用於每個成就和leaderbord

,並呼籲(用於桌面快速啓動爲例)排行榜和成就與

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

謝謝你。我試着解決這個問題。所有的教程都是針對Eclipse的。不知何故,我解決了這個問題。這將在未來幫助很多人。我跟着[官方文檔](https://github.com/libgdx/libgdx/wiki/Google-Play-Game-Services-in-LibGDX),但作爲一個新手很混亂。 – WeirdElfB0y

+0

Np,我知道。您literaly必須收集信息,多個站點,並希望它會成功 – raco

+1

你忘記了'@覆蓋 \t保護無效onActivityResult(INT requestCode,INT resultCode爲,意圖數據){ \t \t super.onActivityResult(requestCode,resultCode爲,數據); \t \t gameHelper.onActivityResult(requestCode,resultCode,data); \t}'在AndroidLauncher中。 –

相關問題