この記事のURL

http://www.dango-itimi.com/blog/archives/2013/001184.html


FLASH tips Google Play Game Services を利用した html5 canvas サンプルゲーム作成

Google Play Game Services を利用した html5 canvas サンプルゲームを、Haxe と CreateJS を用いて開発しました。弾を避けるだけの簡単な内容です。

http://www.dango-itimi.com/gpgss/

キーボードでの操作のほか、ゲーム画面右側の矢印ボタンを押すことでプレイヤー機体を操作できます。スマートフォン用として設けましたが、このゲーム内容でボタン操作はちょっと難しいですね。

400点以上で実績が一つアンロックされ、MY PAGE の一番右側の実績アイコン「TEST」が表示されます。それ以外の実績はダミーで設定しており解除されません。

また実績解除と同時に Google+ へ「実績取得の旨のアクティビティ」を送信し、Google+ のプロフィール内アプリケーションアクティビティ一覧表示箇所に表示されます。アクティビティはとても見つけにく場所にあります。
Google+ プロフィールページの、基本情報内「アプリ」表示箇所の「Google Play Game Services SampleGame」という項目をクリックする事で、アプリ内アクティビティ一覧の確認が可能です。

実装におけるメモ

技術的な内容は、前回の記事も合わせてご参考ください。

 Google Play Game Services 調査メモ
 http://www.dango-itimi.com/blog/archives/2013/001183.html

設定したドメイン内ならば どのディレクトリにゲームファイルを設置しても良い?

Google Play Game Services の説明通り設定を進めていくと、アプリを起動するための URL 設定を行う箇所があります。今回のアプリでは、「http://www.dango-itimi.com/gpgss/」という URL を設定しました。

よって「http://www.dango-itimi.com/gpgss/」という URL からしかサインイン認証処理やハイスコアといったデータ送受信はできないのだろうか、と考えていましたが、どうやらそうではないようです。

「http://www.dango-itimi.com/gpgss/」以外のディレクトリ、例えば「http://www.dango-itimi.com/gpgss/aaaaa/」「http://www.dango-itimi.com/aaaaa/bbbbb/」といった dango-itimi.com ドメイン内ならば、どのディクレクトリにファイル一式を配置しても、サインイン認証処理や、サーバとのデータ送受信は可能でした。

Google Play Game Services の設定途中で「Google apis」というページにて アプリの設定を行う箇所があるのですが、そのページ内 JavaScript origins に設定したドメイン内ならば、どのディレクトリにファイルを配置しても有効になる?のかもしれません。詳しい検証は行なっていません。


一つのアプリ設定で N 個のゲームの設定が可能に

Google Play Game Services のアプリ設定は現在 20 個までしか行えません。なので 20 個のゲームにしか Google Play Game Services の設定を適用できないのだろうか、と考えていました。
しかし上述したように、設定したドメイン内ならば どのディレクトリでも認証が可能になるので、一つのアプリ設定に対し 沢山のゲームを結びつけることが可能になります。

例えばランキング機能を実現するためのリーダーボードは 100 個まで作成可能となっており、一つのリーダーボードに対し一つのゲームを割り当てる、という方法を採れます。

実績は、一つの実績に対し 1000 ポイント中 最低 5ポイントを割り振る必要があるため、最大でも 200 個までしか設定できません。この 200 個の実績を多くのゲームに割り当てようとすると、少々実績数が足りなくなってしまいます。
ただし、実績には「増分実績 Incremental achievements」という設定を行う事が可能で、特定のステップ数を踏まないと実績を取得できないようにする事ができます。これを利用することで、実績数不足は少々解消できそうです。

ゲーム得点や実績の他、任意のデータをクラウド上に保存できる機能(States)もありますが、おそらく同一ドメイン内のゲーム全てでデータの共有を行うことが可能になります。(States 機能に関しては未検証)


他人のデータ閲覧は制限される

今回のサンプルで作成した「MY PAGE」(画面右上ボタンリンクから遷移可能)は、同一ドメイン内ならば どのディレクトリでも認証可能である事を示した例ともなります。MY PAGE を閲覧したユーザのゲームの結果を表示します。

ここで、「MY PAGE」内に自分のデータではなく、他の人のゲーム結果を表示する事はできないだろうか、と試してみました。しかし制限がかかっているのか、他人のデータはほとんど取得できないことがわかりました。

他人のユーザ ID(playerId) を指定しての取得可能なデータは、「Player: get」メソッドのみとなりました。アプリに認証されているユーザの、Google+ ページID, 名前、アバター画像 URL を取得できます。

 Player: get
 https://developers.google.com/games/services/web/api/players/get

他人のユーザ ID を指定しての、ハイスコアや実績アンロック状況の取得はできませんでした。「The viewer can only view their own data.」という error が返ってきてしまいます。

 Scores: get
 https://developers.google.com/games/services/web/api/scores/get

 Achievements: list
 https://developers.google.com/games/services/web/api/achievements/list

パラメータに playerId を指定する箇所があるのですが、実質 現在閲覧中のユーザの ID のみが有効となるようです。

他人のユーザ ID を指定してのハイスコア取得できないとは書きましたが、「Scores: list or listWindow」メソッドならば、リーダーボードに記録されているユーザ得点の取得は可能です。

ユーザごとに任意のデータをクラウドに保存可能な States 機能に関しましては、ユーザ ID を指定してのデータ取得メソッドは用意されていません。閲覧できるのは自分のみ、となりそうです。

その他

ソーシャルボタン

ゲームオーバー時に表示されるボタンに関しまして、少々工夫をしています。

まず Google+ の SHARE ボタンは、前回の blog にも書きました「インタラクティブ投稿ボタン」となっています。

 インタラクティブな投稿の共有
 https://developers.google.com/+/web/share/interactive?hl=ja

Open Graph Protocol を用い、投稿コメントの他、ページ内概要などを表示させています。

 参考)Google+とOpen Graph Protocol 前編
 http://ant-eater.com/public/305/

一方 Facebook のシェアボタンは Open Graph 設定を行なっていますが、ページ内概要は表示されません。いいね(Like)ボタンにしなくてはならないのかもしれません。

Twitter の Tweet ボタンは、URL リンクのシェア機能(twitter.com/share)で簡単にコメント投稿を行わせることができるのですが、スマートフォンから試してみたところ機能してくれませんでした。なので、公式の Tweet ボタンを設置しています。しかして、公式の Tweet ボタン設置の場合、投稿コメント内容をゲーム内容によって変化させるような事は通常はできないようです。解決法としましては以下の URL を参考にしました。

 stack overflow : Dynamically change Tweet Button “data-text” contents
 http://stackoverflow.com/questions/10486354/dynamically-change-tweet-button-data-text-contents

チート対策

今回はサンプルということで何も対策をとっていません。詳しい方ならば、得点変更を行いランキング操作を行うことが可能となってしまいます。

今後 Google Play Game Services を利用したゲームを制作する場合、色々と対策を練っていきますが、ブラウザゲームという事で完璧な対策は難しいです。チートはあるものとして考えたほうがよいかもしれません。

今回の記事に書きました通り、Google Play Game Services の現在の仕様上、ランキングくらいしか他人に対し影響はでるものはないため、そこまで問題にはならないかとも思います。全体のランキングの他、自分の設定したサークル内のみで有効になるようなソーシャルランキング機能も用意されているので、そちらを中心に見てもらう方法を採ることもできます。

まとめ

利用できる機能は限られているものの、ミニゲーム程度ならば十分すぎる機能です。こういった機能を実装するために以前は Google App Engine を利用する事を考えていましたが、今後はサーバ不要となりました。サーバ側の処理作成が不要になった事で、より一層クライアント側の処理作成に集中でき開発効率も向上します。

無料で利用できるとはいえ、サーバとの通信量に制限はあるようで、どれくらいで制限いっぱいになるのかは不明です。Google App Engine の時は、後に通信料に応じて有料になったりしましたが、Google Play Game Services はどうなるのか気になるところでもあります。

[ FLASH ] [ tips ] 投稿者 siratama : 2013年06月16日 22:29

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/1144

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]