くまちゃんのiOS/Androidゲームプログラミング

マイペースでゲームつくってます。

SurfaceViewのお勉強

今週はAndroidのSurfaceViewについて経験値を上げていました。

きっかけは、OpenGLではテキスト描画がめちゃくちゃメンドくさい、というか私のスキルではテキスト描画ができないからなんですね。iOSであればAppleご謹製のラッパーであるSprite KitにSKLabelという、それはもうこのAndroidでのツラさを知ってからでは涙がちょちょぎれるようなありがたい仕組みがあるんですが、ネットを漁ってもどーも立ち向かうにはスジが悪そう。なんか一回canvasで文字描いてテクスチャ貼り付けて、とか。自作するにはOpenGLをぶりんぶりん振り回す理解力が必要みたいだけど、真正面からOpenGLへの突撃することは社会人週末ホビープログラマーでは効率が悪すぎる。10年ぐらい周辺コードを漁っていたら、なーんとなく染み付いてきてて、じんわりわかっている、という学習カーブがいいでしょう、こやつは。

で、そもそもなんでテキスト描画をせねばならないのか。
趣味のアクションゲームを作るだけなら、テキスト描画をすっぱりあきらめて、必要なものは画像でガリガリできるんですが、ちょっとお仕事がらみの便利アプリで大量のテキストを描画せねばならない状況になって、それはさすがに画像ではやっとられん、と。テキストの内容も結構コロコロ変わりそうだし。

ということでGoogleで調べていった結果、SurfaceViewがまだ学習コスト低そうだ、と。ゲームプログラミング大好きの私からすると描画速度が劣る時点で食指が動かなくなるのですが、今回ばかりはテキスト描画のやりやすさと天秤にかければやむを得ず...。で、実際やってみると。おお、めちゃくちゃ簡単ではないか。Android OS 5.0の現在にあってはcanvasを使うこと自体かなりカビ臭いようなのですが、この記述はラク過ぎる。まだ世間的には5.0の普及に時間かかりそうなのでいいんじゃないですかね。私はAndroidの先端を突っ切って行く人ではないですし。

あと、今回副産物的に良かったことは、半年前にはAndroidのお作法、すなわちアプリを起動して終了するまでの流れというか必要な関数のライフサイクルがイマイチぴんときていなかったのですが、あらためてSurfaceViewの基礎に取り組んだことによって、MainActivityとの関係や画像を入れておくRクラスとの関係がわかったことですね。やっと見えてきました。

そうそう、今回勉強にあたって諸先輩方のありがたいコードをいろいろ勉強させていただいたんですけど、ゲームプログラマからすると常に気になる部分が
Androidは端末の画面サイズが多様すぎるので固定させたい->サイズ固定、画像は拡大して描画
・拡大はいいんだけど、画面タッチ座標は違うんじゃない?->拡大を考慮
という部分。あちこちスニペットをくっつけながらなんとかできたっぽいです。
f:id:tadakazu1972:20150705220703j:plain