Android でのゲームプログラミングを解説してみたいと思います。言語は Java です。Android 特有の知識はゼロから解説していきますが、Java 言語の基礎知識は既に習得している方を想定しています。
「Java の基礎知識」がどの程度のレベルを指しているのかという話ですが、この指針を読み間違えると、この解説を進めていった先で理解困難な話題に遭遇した際、Java 言語の問題なのか、それとも Android の問題なのか判断が出来ず、解決が困難になってしまう恐れがあります。
ですので、この解説で必要とする Java 言語の知識レベルは明確にしておきたいと思います。動画「【Java】ゲームプログラミング超入門」の Part80 までを理解されている方向けにします。これなら知識レベルの判定基準が単純明快ですからね。そんな長い動画見る気しないよ! という方はまあ、 Java 資格の「OCJ-P Bronze」程度であれば問題ないと思って下さい。
では早速、プログラミングをしていきたいのですが、Android 向けのプログラミングを行なうには、Java のインストール以外に、Android の開発環境も構築する必要があります。ただ、その方法は、ぶっちゃけググればいくらでも出てきますので、ここでは解説しません。同じような導入解説サイトを作っても無駄ですからね。数あるサイトの中で一番分かり易いものを作れる自信もありませんし。
というわけで、ここでは、いわゆる「Hello World」までは出来る事を前提に話を進めて行きたいと思います。基本的に Hello World はプロジェクトを作成した際、自動的に作られると思いますので、迷うことはないですよね。
ところが実はゲームプログラミングの場合、この時点で既に、迷うというか選択肢を叩き付けられているのです。自動で作成される Hellow World ですが、Java ソースを見ても「Hello World」という文字列は見当たりません。では何処に記述されているのでしょうか? 答えは「main.xml」です。
自動で生成された Java ソースには、このような記述がされているはずです。
簡単に言うと、この処理により main.xml が表示される仕組みになっています。厳密な解説ではないですが、ゲームを作る上ではこの程度の認識で問題ないかと思われます。なぜならば、基本的にゲームプログラミングでは、この方式は利用しないからです。
画面上に「Hello World」と表示する。この単純な処理を行なうだけでも Android プログラミングでは大きく分けて3つの選択肢があります。自動生成の Hellow World で使用している種別は「View」になります。
種別 | 概要 |
View | 一番の基本。HTMLを組むような感覚でパーツを置いていくことにより画面を作成する。キャンバスを単体で置けば全画面表示のアクション系ゲーム向けのような画面構成にも出来るが、あまり速度が出ない。 【対象】ソーシャルゲーム等? SLG も内容によっては可 |
SurfaceView | キャンバスを使用することを主目的?としている。全画面表示のキャンバスを高速に描画できる。キャンバス以外のパーツを配置することも出来るが、キャンバスの高速性は失われてしまう? 【対象】2Dゲーム全般。スーパーファミコン程度のゲームなら大抵のものは作れるはず。 |
GLSrufaceView | OpenGL ES によって画面全体を描画する。当然、高速な描画が期待できる。3D だけでなく 2D ゲームでも、弾幕 STG 等ではこちらを使用すべき? ただし低レベルAPI しか用意されていないため、フレームワークやライブラリ類を使用せずにイチから組み上げるのは非常に困難。 【対象】3Dゲーム全般。高フレームレート確保が絶対条件の 2D ゲーム。 |
概要欄に「?」が多いのは気にしないで下さい。Android 機は進化が早く、ノウハウ的な話は時代によって変わってしまうため、確定的な話は出来ないのです。しかし、どんなに時代が進もうとも、View > SurfaceView > GLSurfaceView の順で描画速度が向上することは変わらないでしょうし、ゲーム作成の主戦場は全画面表示でしょうから、View を使用したパーツ組み合わせ画面が主流になることは無いと思います。
そうなると、ゲームプログラミング目的で習得すべきものは、SurfaceView というとこになります。「GLSurfaceView じゃダメなの?」という質問に対しての回答は、「ダメではないです。大変なだけです」と答えておきたいと思います。GLSurfaceView は 2D 描画に関しても SurfaceView よりも高速ですので、全てのケースにおいて GLSurfaceView を使っても、出来上がったものについては何も欠点はありません。完成させることが自体が大変である、ということが欠点なだけです。
「俺は将来ゲームを作る仕事に就く! だから『大変』なんてのは欠点にならないぜ!!!」
そういった意気込みも大切だとは思います。しかし、そもそも仕事でゲームを作るのであれば、実際問題、イチから作ることはなく普通はライブラリ類を使用するかと思います。ですので、GLSurfaceView というか OpenGL をそういった目的でイチから学ぶ必要性は、あまり無いのです。
OpenGL なんていうものは、知的好奇心で触るものだと個人的には思っています。もちろん、これは私の主観ですので、この意見が「正しい」というわけではありません。ここまで言って、それでも OpenGL を学びたいという方は、是非、ググって茨の道を突き進んでください。ちなみに、Android の OpenGL は、正確には「OpenGL ES」ですのでお間違え無いように。「OpenGL 入門」等でググると、「ES」では通用しない内容である可能性があります。
【次】第2話 SurfaceView の Hello World