前回 は、基本的なサンプルコードを動かしました。
通信対戦の機能に興味があったので、今回はもう一つサンプルを動かしてみることにしました。
サンプルコードがダウンロードできるページの説明を読むとButtonClicker2000というサンプルがリアルタイム-マルチプレイヤーAPIを使用しているようです。
Sample games / Google Play Game Services — Google Developers
自分は前回ダウンロードしてあるので、そのまま進めます。
プロジェクトのインポート
ButtonClickerというプロジェクトをインポートします。
.project
ファイルがないため(だと思いますが)、Eclipseにインポートするとプロジェクト名がMainActivityになりました。これは嫌なので適当にリネームしました。
プロジェクトにはエラーが発生しているかと思います。前回インポートしておいたBaseGameUtilsをライブラリとして参照します。Package Explorerからプロジェクトを右クリックして、Properties > Androidと選択し、下段のLibrary欄でBaseGameUtils
を追加しましょう。google-play-services_lib
は追加しなくてもエラーにはならないようです。
また、インポート時に選択されたAndroid SDKのバージョンがAndroid 2.x系だとstyles.xmlがエラーになります。自分はAndroid 4.2.2に変更しました。SDKバージョンもProperties > Androidから変更できます。
プロジェクトを眺めてみる
まずはresフォルダから見てみましょう。
layoutファイルは1つだけですが、コメントでいくつも〜 SCREENと書かれているので、どうやらViewを切り替えて動作するようです。いくつか画面が用意されているみたいですね。
続いてvaluesの中を見てみます。
ids.xmlを見てみると、app_id
という名前のタグがReplaceMeと書かれています。前回と同じようにここに自分のアプリケーションIDを書かなければいけなさそうです。ということは、パッケージ名も変更する必要がありそうですね。
strings.xmlは特に書き換える必要がなさそうです。同様にstyles.xmlも変更する必要はなさそうです。
javaのソースファイルは約850行ほどのMainActivity.javaが1つだけですね。
念のためReplaceMe
で検索をかけてみると、829行目に1つヒットしました。
周辺のコードを読むと、ids.xmlのapp_id
が修正されていない場合(ReplaceMeのままだった場合)に処理を失敗させるためのコードのようです。
少し上には、パッケージ名がcom.google.exampleで始まるパッケージ名でも同様の処理が入っています。パッケージ名の変更はやはり必須のようです。
その他の部分は特に見ていないのですが、MainActivity.javaも特に修正する必要はない気がします。
ということで、修正する必要があるのは、
- パッケージ名
- ids.xmlの
app_id
の2箇所だと思います。たぶん。
パッケージ名の変更
AndroidManifest.xml
を開きます。19行目のパッケージ名を書き換えましょう。
MainActivity.javaでRクラスの参照が解決できなくなってエラーになるので、MainActivity.javaを開いてCmd+Shift+O
を押して、修正したパッケージ名のRクラスを参照するように変更します。
Developer Consoleへの登録
前回の記事 を参考にして、Developer Consoleにゲームを登録します。
Developer Consoleを開いたら、左側のゲームコントローラのようなアイコンをクリックします。
新しいゲームを追加をクリックして、ButtonClicker2000を登録します。セットアップ用ウィンドウのゲームでGoogle APIをまだ使用していませんタブを選択し、ゲーム名(ButtonClicker2000)を入力して、ゲームの種類を適当に選びます。次へのボタンを押して、次に進みます。
1.ゲームの詳細画面は特に入力しなくても次に進めるので飛ばします。2.リンク済みアプリをクリックしましょう。
アンドロイド アプリのリンクボタンをクリックして、空欄になっているパッケージ名の欄に、変更したパッケージ名を入力します。その下のリアルタイム マルチプレイヤーというON/OFFの項目はONにしておくのが良さそうな気がするのでONにします。保存して次へをクリックします。
今すぐアプリを承認のボタンを押します。Branding Informationというウィンドウが表示されますが、特に追加で入力しなくてもcontinueボタンが押せたので、そのまま進めます。
次のClient ID Settingsというウィンドウでは、Signing certificate fingerprint (SHA1):の項目が必須になっているようなので、前回と同様以下のコマンドでfingerprintを取得し、コピペします。コピペしたらCreate clientのボタンを押しましょう。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
今回はマルチプレイヤー(複数人)での動作確認が必要になります。
自分以外のGoogle+アカウントをテスターとして登録しましょう。5.テストをクリックして、テスターを追加ボタンから、テスターとして登録したいgmailアドレスを登録します。
これで必要な情報は揃ったはずなので、次はソースの修正を行います。
ソースコードの修正
ソースコードの修正と言ってもres/values/ids.xmlを修正するだけです。
Developer Consoleのアプリ名の右側に表示されているアプリケーションIDをコピーして、ids.xmlのReplaceMeとなっている箇所に上書きしましょう。
実行
アプリを起動してみます。
サインインしてみると、Single Player、Quick game、Invite friends、See invitationsというボタンが並んでいます(サインインに失敗する場合は、Developer Consoleにテスターとしてきちんと登録できているか確認すると良いと思います)。
Single Playerは一人で遊ぶモードですね。試してみたらボタンと数字、徐々に減っていく時間が表示されました。時間内のクリック数を競うゲームのようです。
Quick gameはマルチプレイヤーで遊びますが、対戦相手は誰でも構わないときのモードのようです。実際に2つのアカウントでQuick gameを選んだところ、対戦が開始されました。プレイヤー名はPlayer_XXXX(XXXXの部分は数字)となって、Google+のアカウント名は表示されないようです。
Invite friendsとSee invitationsは、Google+の友人をゲームに誘ったり、誘われたゲームを見るためのモードですね。誘われた方はプレイ、拒否から好きな方を選べます。このモードではプレイ中はGoogle+のアカウント名が表示されました。
プレイ中にボタンを押すと相手の画面でもすぐに数字が増えていきます。こういったインターネット越しの対戦はほとんど経験がないのですが、十分なリアルタイム性能があるように思います。
850行程度のコードでここまでできてしまうなんてすごいですね。サンプルのソースコードさえ読めば、ひと通り実装できてしまいそうです。
サンプルを2つ動かしてみて、Google Play game services SDKはサンプルがしっかりしている印象を受けました。
他の機能もサンプルを動かしてみるのが近道なように思いました。
前回、今回の記事が誰かの参考になれば幸いです。