はじめに
多くのゲーム開発者は、ゲームでGoogle Playゲームサービスを使用したいと考えています。 私も例外ではありませんでしたが、 libgsdxゲームにGPGSサポートをすばやく追加する方法に関する知識とスキルはありませんでした。 この記事では、レコードと実績のテーブルを接続するプロセスについて説明します。 初期データ: Eclipse 、ゲームサービス、Androidプロジェクト、ルートプロジェクトを操作するためのカスタマイズされた開発者コンソール。
カスタマイズ
GPGSで動作するように開発者コンソールを構成する方法については説明しませんが、そこからは次の形式のリソースが必要になるとのみ言います。
games-ids.xml
app_idはアプリケーションの識別子であり、 leaderboard_xxxとachievement_xxxの形式の行は、それぞれ特定のレコードと実績のテーブルを示します。 ゲームのandroid-projectにgames-ids.xmlという名前のリソースxml-fileを作成し、そこにリソースを配置する必要があります。
<?xml version="1.0" encoding="utf-8"?> <!-- Google Play game services IDs. Save this file as res/values/games-ids.xml in your project. --> <resources> <string name="app_id">310266082735</string> <string name="achievement_take_10_levels">HgkIr62KmoQJEAIQBg</string> <string name="achievement_take_30_levels">HgkIr62KmoQJEAIQBw</string> <string name="achievement_take_50_levels">HgkIr62KmoQJEAIQCA</string> <string name="achievement_take_70_levels">HgkIr62KmoQJEAIQCg</string> <string name="achievement_take_100_levels">HgkIr62KmoQJEAIQCQ</string> <string name="achievement_beginner_cutter">HgkIr62KmoQJEAIQDw</string> <string name="achievement_advanced_cutter">HgkIr62KmoQJEAIQEA</string> <string name="achievement_master_cutter">HgkIr62KmoQJEAIQEQ</string> <string name="achievement_lucky">HgkIr62KmoQJEAIQEg</string> <string name="achievement_cheerful">HgkIr62KmoQJEAIQEw</string> <string name="achievement_exceptional_joyous">HgkIr62KmoQJEAIQFA</string> <string name="achievement_thrust">HgkIr62KmoQJEAIQFQ</string> <string name="achievement_very_persistent">HgkIr62KmoQJEAIQFg</string> <string name="achievement_the_most_resistant">HgkIr62KmoQJEAIQFw</string> <string name="achievement_1_000_000">HgkIr62KmoQJEAIQGA</string> <string name="achievement_2_000_000">HgkIr62KmoQJEAIQGQ</string> <string name="achievement_3_000_000">HgkIr62KmoQJEAIQGg</string> <string name="achievement_unlucky">HgkIr62KmoQJEAIQGw</string> <string name="achievement_loyal">HgkIr62KmoQJEAIQHA</string> <string name="achievement_fan">HgkIr62KmoQJEAIQHQ</string> <string name="achievement_leader_of_mars">HgkIr62KmoQJEAIQHg</string> <string name="achievement_leader_of_neptune">HgkIr62KmoQJEAIQHw</string> <string name="achievement_unhurried">HgkIr62KmoQJEAIQIA</string> <string name="achievement_final_push">HgkIr62KmoQJEAIQIQ</string> <string name="leaderboard_leaderboard">HgkIr62KmoQJEAIQAQ</string> <string name="leaderboard_pack_1">HgkIr62KmoQJEAIQCw</string> <string name="leaderboard_pack_2">HgkIr62KmoQJEAIQDA</string> </resources>
GPGSにはgoogle-play-services_libライブラリプロジェクトが必要です。 彼の方法:
<android-sdk>\extras\google\google_play_services\libproject\google-play-services_lib
デフォルトでは、ゲームサービスはAndroid SDKと共にインストールされないため、このパスには何もありません。 これを修正するには、 Android SDK ManagerにGoogle RepositoryとGoogle Play servicesという2つのパッケージをインストールする必要があります 。
google-play-services_libライブラリプロジェクトをEclipseにインポートする必要があります。 次に、インポートしたプロジェクトのプロパティで「ライブラリです」チェックボックスを設定します。
次に、Androidプロジェクトとgoogle-play-services_libライブラリをリンクする必要があります。 これを行うには、 ビルドパスセクションの必須プロジェクトにライブラリを追加します。 ( プロパティ-> Javaビルドパス->プロジェクト )。
この時点でセットアップを終了できますが、 Googleの公式ドキュメントではGameHelperヘルパークラスの使用を強く推奨しています。 このクラスを使用すると、ゲームサービスを使用する際の作業が非常に簡単になります。 そのインストールは、 google-play-services_libのインストールに似ています(プロジェクトをライブラリとしてインポートし、プロジェクトライブラリをAndroidプロジェクトにリンクします)。 BaseGameUtilsをダウンロードします 。
AndroidManifest.xmlで 、2つのアクセス許可とメタデータを追加します。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
メタデータは、 アプリケーションタグ内に追加されます 。
<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" />
セットアップが完了しました。
コード
メインアクティビティでは、 GameHelperListenerの 2つのインターフェイスActionResolverを実装します。
public class MainActivity extends AndroidApplication implements GameHelperListener, ActionResolver
GameHelperListenerインターフェイスは次のとおりです。
public interface GameHelperListener { /** * . * «Sign-in» */ void onSignInFailed(); /** */ void onSignInSucceeded(); }
ActionResolverインターフェースを自分で作成します。 プラットフォーム固有のコードを呼び出すために必要です。 この手法は、公式のlibgdx wikiで説明されています 。 インターフェースの例:
public interface ActionResolver { /** */ public boolean getSignedInGPGS(); /** */ public void loginGPGS(); /** */ public void submitScoreGPGS(int score); /** * * * @param achievementId * ID . games-ids.xml */ public void unlockAchievementGPGS(String achievementId); /** Activity */ public void getLeaderboardGPGS(); /** Activity */ public void getAchievementsGPGS(); }
メインアクティビティのサンプルコード:
public class MainActivity extends AndroidApplication implements GameHelperListener, ActionResolver { // private GameHelper gameHelper; // private TestGame game; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // CLIENT_ALL API gameHelper = new GameHelper(this, GameHelper.CLIENT_ALL); // gameHelper.setConnectOnStart(false); gameHelper.enableDebugLog(true); // // ( – ) getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // this ActionResolver. // - GPGS game = new TestGame(this); AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); initialize(game, config); gameHelper.setup(this); } // gameHelper': onStart(), onStop() // GPGS android- @Override protected void onStart() { super.onStart(); gameHelper.onStart(this); } @Override protected void onStop() { super.onStop(); gameHelper.onStop(); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // gameHelper , // , // Activity gameHelper.onActivityResult(requestCode, resultCode, data); } @Override public boolean getSignedInGPGS() { // return gameHelper.isSignedIn(); } @Override public void loginGPGS() { try { runOnUiThread(new Runnable() { @Override public void run() { // . // . UI- gameHelper.beginUserInitiatedSignIn(); } }); } catch (Exception e) { e.printStackTrace(); } } @Override public void submitScoreGPGS(int score) { // ID // “HgkIr62KmoQJEAIQAQ” Games.Leaderboards.submitScore(gameHelper.getApiClient(), "HgkIr62KmoQJEAIQAQ", score); } @Override public void unlockAchievementGPGS(String achievementId) { // ID achievementId Games.Achievements.unlock(gameHelper.getApiClient(), achievementId); } @Override public void getLeaderboardGPGS() { // Activity . // Activity startActivityForResult( Games.Leaderboards.getAllLeaderboardsIntent(gameHelper .getApiClient()), 100); } @Override public void getAchievementsGPGS() { // Activity startActivityForResult( Games.Achievements.getAchievementsIntent(gameHelper .getApiClient()), 101); } @Override public void onSignInSucceeded() { } @Override public void onSignInFailed() { } }
ゲームに成果があると仮定します-100万ゲームポイントを獲得すると、これを実装するコードは次のようになります。
public static void checkTotalPoints(int points) { ActionResolver res = getActionResolver(); if (!res.getSignedInGPGS()) { return; } if (points >= 1000000) { res.unlockAchievementGPGS("HgkIr62KmoQJEAIQGA"); } }
ハイスコアテーブルでも同じですが、簡単です。ActionResolverインターフェイスのsubmitScoreGPGS(int score)メソッドを呼び出すだけです。
PSゲームサービスをテストするには、開発者コンソールと同じ証明書を使用してapkファイルをエクスポートする必要があります。 コンソールにテスターアカウントを追加する必要もあります。 ゲームサービスへの変更は、しばらくしてから有効になります。
使用したソース
developers.google.com/games/services/android/quickstart
developer.android.com/intl/en/google/play-services/setup.html
github.com/libgdx/libgdx/wiki