2015-10-07 133 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中。 –

相关问题