rac*_*aco 2 android libgdx android-studio google-play-games
从Eclipse迁移到Android Studio之后,我一直在苦苦挣扎.问题是你可以找到的大多数指南和教程都是针对Eclipse的,但是如果你能找到一个适用于Android Studio的指南和教程,它就缺少了最重要的部分 - 实现库或第三方代码.经过一周的问题和错误,这里是一个指南
要求:Google Play服务和Google Repostory(在SDK管理器中的Extras下),BaseGameUtils
然后选择Import Gradle Project并选择BaseGameUtil文件夹(在该步骤之前不要复制项目中的BaseGameUtils.让Android Studio执行此操作)gradle完成后同步selefct Build> Make Module'BaseGameUtils'

注意如果你在构建时有使用-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"/>
Run Code Online (Sandbox Code Playgroud)
注意:没有必要在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" />
Run Code Online (Sandbox Code Playgroud)
现在你需要在Srtings中设置app_id号码(android/res/values/Strings.xml)
<string name="app_id">928019648708</string>
Run Code Online (Sandbox Code Playgroud)
您的应用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();
}
Run Code Online (Sandbox Code Playgroud)
现在我们需要在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);
}
}
Run Code Online (Sandbox Code Playgroud)
在主类中创建构造函数(在此示例中为MyGame):
public ActionResolver resolver;
public Base(ActionResolver ar) {
resolver = ar;
}
Run Code Online (Sandbox Code Playgroud)
连接gplay服务电话:
if (!resolver.getSignedInGPGS())
resolver.loginGPGS();
Run Code Online (Sandbox Code Playgroud)
解锁成就并提交分数:
if (resolver.getSignedInGPGS()){
if (currentScore == 0){
resolver.unlockAchievementGPGS("CgkI5MyZk4EbEAIQAg");
}
if (Cookie.bestScore >= 100){
resolver.unlockAchievementGPGS("CgkI5MyZk4EbEAIQAw");
}
resolver.submitScoreGPGS(Cookie.bestScore, "CgkI5MyZk4EbEAIQAQ");
}
Run Code Online (Sandbox Code Playgroud)
注意:在开发者控制台中为每个成就和leaderbord使用相应的id值
和呼叫排行榜和成就
resolver.getLeaderboardGPGS();
resolver.getAchievementsGPGS();
Run Code Online (Sandbox Code Playgroud)
最后,桌面,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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |