投稿

ラベル(Android)が付いた投稿を表示しています

Google Play Games Services v2 を使ってみる

イメージ
Google 公式の サンプル が古く、API が刷新された v2 には対応していない。サンプルが旧 API でグチャグチャとやっていることが、v2 ではライブラリー側に隠蔽された感じになっており、グチャグチャやっているサンプルを参照すると、却って無駄に学習コストを浪費する面もある。 Google Play Games Services は基本的には Firebase のようなクラウド BaaS のようなものであり、Google Play コンソールからサーバー側の設定作業を行うものの、Google Play そのものとは独立した代物と考えた方がいい。 学習面で Firebase(Analytics や Crashlytics)よりも一段ややこしいハードルがあって、それは、アプリ認証(OAuth)をインプリメントしなければならない点である。サーバー側での適切な設定と、アプリ側での適切な設定を、協働させて行わなければならない。独学で誰にも意見を聞けない状態で、上手く動作しない場合に、どこに原因があるのか、学習段階で突き止めるのは非常にストレスフルである。一旦、成功してしまえば、後から振り返って検証するのは難しくはないのだが。 Firebase プロジェクトを選択する 既に Firebase Analytics/Crashlytics は組み込み済だったので、それに追加する形で Games Services をセットアップする。 Play ゲームサービスの設定 Play ゲームサービスの設定画面に遷移し、必要な作業が列挙されている。認証情報を作成することにする。 認証情報を追加 ここで認証情報を追加するためには、OAuth クライアントを作成する必要がある。 OAuth クライアントの作成 ここで表示された情報を使って、Google Cloud Platform にて OAuth クライアントを作成する流れになる。 Google Cloud Platform での OAuth クライアント ID の作成 直前の Google Play コンソール側で表示された情報を使って Google Cloud Platform 側で OAuth クライアント ID の作成をする。 ただし、留意しなければならないのは、

OpenGL FrameBuffer オブジェクト(FBO)

Grafika の RecordFBOActivity を見ながら、FBO(FrameBuffer Object)について勉強中。 DRAW_TWICE (draw x2) レンダリング(描画処理;draw メソッド)自体を(デフォルト framebuffer と動画ファイル用に)丸々 2 回行っている。 FBO (draw x1 + blit x2) オフスクリーン用の FBO にレンダリング(draw)を行い、それをデフォルト framebuffer と動画ファイルそれぞれに blit している。 BLIT_FRAMEBUFFER (draw x1 + blit x1) GLES 3.0 の glBlitFramebuffer を使い、デフォルト framebuffer にレンダリング(draw)したものを、先に動画ファイルに blit してから、画面表示用に swap している。 draw は描画オブジェクトの数、blit は転送するデータ(画面)サイズに依るので、DRAW_TWICE がいいのか、それ以外が良いのか一概には言えない。だが明らかに、BLIT_FRAMEBUFFER(draw x1 + blit x1)は FBO(draw x1 + blit x2)より確実に効率が良さそうである。 他、参考:LearnOpenGL: Framebuffers

Beginning Android Games(Android ゲームプログラミング A to Z)その 2

イメージ
前回の記事 その 1 の続き。 前回は本( libGDX の創始者である Mario Zechner 氏の著書“ Beginning Android Games ”(邦題は『 Android ゲームプログラミング A to Z 』))の 7 章の内容がベースだったが、今回は 8 章の内容がベースになる。 7 章では OpenGL ES 1.x そのものの使い方の解説(インプット)に主眼があったのに対して、8 章では「OpenGL そのもの」というよりは、いよいよ「OpenGL を使って」様々なグラフィックス表現を実現する、アウトプットの段階になる。 前回の記事では、Mario Zechner 氏のサンプルプログラムと同じ結果を実現するために、最近の Android プログラミングの事情に合わせて、Kotlin と最新の Android API をベースとし、さらに OpenGL は 2.0 に準拠するため自前のシェーダーを用意して、自分流のサンプルプログラムとライブラリーを構築した。 Game クラスと Screen クラスの構造、そして OpenGL をグラフィックスエンジンとして使用するための GLSurfaceView.Renderer クラスを用意し、その他のファイル入出力やサウンド、タッチ入力などの部分は、Android の API をそのまま使えばいいだけじゃないかということで、サンプルプログラム化、ライブラリー化の対象外としていた。 しかし、8 章では、タッチ入力をサンプルプログラムで使用するので、これだけはどうにかしなければならない。もちろん、Android プログラミングのタッチ入力に熟達している人ならば問題ないが、タッチイベントは独特のノウハウがあるので、普通はかなり面倒な代物である。本の 8 章のサンプルプログラムの側では、3 〜 6 章の過程で用意したライブラリーのタッチハンドラーがあり、そのタッチハンドラーから得られるイベントによって動作するように記述されているので、タッチ入力に関しては、この 8 章の個々のサンプルプログラムで直接扱うよりは、相当するタッチハンドラー用のクラスを用意して対応するのが無難である。 TouchHandler( 本家 ):本はかなり古い時代の Android API を基準としてい

Beginning Android Games(Android ゲームプログラミング A to Z)その 1

イメージ
Android を始めとするマルチプラットフォームの Java 用ゲーム開発フレームワーク libGDX の創始者である Mario Zechner 氏の著書“ Beginning Android Games ”(邦題は『 Android ゲームプログラミング A to Z 』)だが、原著は 3 版が 2016 年、初版の日本語訳版は 2011 年に出版されたきりであり、いずれにしても、最新の Android API からは隔絶した内容のものとなってしまっている。 初版は 10 年を経過(!)しているので、Android API 以外の内容にも古さは否めないが、とはいえ原著の 3 版にしても、ごく一部の Android API に関する部分を 2016 年の時点に合わせて修正したのみで、本の構成内容自体は全く更新されていない。特に、初版の時点では、OpenGL ES の 2.0 が出始めたばかりで普及しておらず、OpenGL ES 1.x を対象にしたのはわかるが、版を重ねても、OpenGL 2.0 以降に対応させてはいない。1.x と 2.0 以降では大きな違いがあるので、そこを変えるとなると大幅な書き直しになってしまうからだろう。また、本を読む初心者にとっても、2.0 以降のプログラマブルシェーダーについての学習のハードルが加わることになり、Android ゲーム開発全般をテーマとする本書のスケールを上回ることになる。 この本の良さはそういった Android プログラミングで直接使える技術の情報源として以外の部分にあるので、依然として一読の価値ある本だと思う。Amazon ではほとんど送料だけみたいな価格で古本が売られていたりするので、興味が湧いたら是非、一冊入手してみることをお勧めする。 自己流ゲームライブラリーの構築 本書を参考にして、自分流のゲームライブラリーを構築してみようと思う。最新の Android API 対応は当然として、その他の要点は次の通り: 2D OpenGL ES 2.0+ Kotlin プラットフォームは Android 専用とし、インターフェース化してマルチプラットフォーム化を意識した設計にするようなことはしない。例えば、ファイル入出力なども、直接 Android API を駆使し、ゲ

Java を Kotlin へ

Kotlin については Google の公式ドキュメントが多数あるが、 Kotlin への変換 という Codelabs の片隅にあった文章が、最初に知りたかったことだけが物凄く完結にまとまっていた。最初にこの文章にアクセスできていればと思ったほど。もちろん、Java ベースの Android プログラミングのベースがある人限定の話になるが。 Java Kotlin final オブジェクト val オブジェクト equals() == == === データのみを保持するクラス data クラス コンストラクタでの初期化 init ブロックでの初期化 static フィールドおよび関数 companion object で宣言されているフィールドと関数 シングルトン クラス object 例えば、当初、companion object を見て、「何で Java の static オブジェクトと同じものを、わざわざ名前を変えて companion object とかいう名称にしているんだ?」と思ったが、実は良く考えられているようだ。Java の static オブジェクトの場合はオブジェクト毎の modifier として宣言するのに対して、Kotlin の companion object はクラス内のブロックとして宣言されている。これは可読性の点で優れている。 Kotlin は Java をベースにしながらも、(上の表からは割愛されているが)埋め込みテキストなど、可能な限り、可読性のために Python などのスクリプト系言語の簡潔な表現を取り入れようとしている感じかもしれない。

新規登録アプリのアップロード用に Signed Bundle をビルド

イメージ
Google Play で新規に登録するアプリのために Signed Bundle をビルドするための一通りの手順。 Android Studio の Build メニューから、Generate Signed Bundle / APK を選択。 もちろん、Android App Bundle で。 Create new からキーとキーストアの新成画面に行く。 全ての欄を適当に埋めて、作成する。 (なぜか毎回ここで警告が出る) キーストア作成画面から元の画面に戻るので、作成された新しいキーストアとキーによって、ビルドを進める。 release ビルド開始。 ビルド終了。 app-release.aab が生成されている。

開発中の未公開アプリに Firebase(Analytics + Crashlytics)を設定

イメージ
開発中で現時点ではアプリストアに未公開の段階で、先に Firebase(Analytics + Crashlytics)を設定する手順をまとめておく。 Analytics 新規にプロジェクトを追加する。 Firebase としてのプロジェクト名を決める。 当然、Analytics は有効にする。 Analytics の アカウント に関する設定。 少し時間を要して Firebase サーバー上に新規プロジェクトが生成される。 プロジェクトの概要の横の歯車から、 プロジェクトの設定 に入る。 Android(のアイコン)を選んで、アプリの追加に進む。 Google Play にアップロードするアプリの パッケージ名 をここで設定する。 以上の設定を反映した、 google-services.json が生成されるので、ダウンロードする。 Firebase(の特に日本語表示)の情報は古いものが混じっていて、google-services.json の生成画面にあるような感じには、今の Android Studio で表示されない。普通にフォルダを開いて、ファイルを直接 app 直下に置くのが確実。 ここの日本語化された設定例の情報も古い。バージョンなどはもっと新しくなっていて、 Firebase そのものの設定に関する公式ドキュメント を見た方が確実かもしれない。ともかく、プロジェクトの gradle と、app の gradle に一定の設定が必要ということである。 以上で設定は終了。 Analytics が適切に設定できてちゃんと始動しているかどうかは、プロジェクトの設定の 統合 タブで有効になっているかどうかでわかる。 さらに、 Realtime を見てみれば、本当にアプリから Analytics にデータが送られているのを確認することができる。 Crashlytics まず、Firebase サーバー側で有効化しておくことが必要な点に留意。 このグルグルが結構時間がかかる。5 〜 10 分程度という感じ。 Firebase のサーバーの設定によらず、アプリ側の Crashlytics が正常に組み込めているかどうか