2009年7月、日本でもAndroidを搭載した携帯電話(NTTドコモの「HT-03A」)が発売されました。もうだいぶ前のように感じられるかもしれませんが、今からたった1年2カ月ほど前のことです。2010年4月の「Xperia」の発売以降、Andoroidを搭載した端末の発売が相次ぎ、Androidに対する関心は一層高まっています。本特集では、Androidプログラミングの基本を紹介します。日本でのAndroid端末発売当時の記事なので古い個所もありますが、Androidアプリ開発の概要を理解するのに役立ちます。
 今回は、この連載の集大成として、Androidでのゲームアプリを完成させます。

 前回はViewクラスを拡張して独自のCircleViewを実装しました。ただし、リアルタイムに画面が動作するようにはなっていません。まずはリアルタイムで処理できるようにしてみましょう。

 Viewを単純に拡張するとイベント・ドリブンで処理されるため,リアルタイム処理が必要なゲームには適さないことがわかりました。リアルタイムで処理するには,UIスレッドから独立したスレッドを起動する必要があります。Androidでは,独立したスレッドで画面を描画する仕組みとして,「SurfaceView」というパッケージが用意されています。次のサンプルでは,このSurfaceViewを拡張して,画面の描画をUIスレッドから独立したスレッドで処理します。

SurfaceViewの実装とリアルタイム描画

 作成するサンプルは,簡単なゲーム・アプリです。画面タッチによって白い玉を動かして,縦横に動き回る敵の赤い玉に当たらないように逃げ回るというゲームです。時間が経過するとレベルが上がり,赤い玉の速度がどんどん速くなります。赤い玉に当たってしまうとレベル1に戻ってしまいます。作成手順は先ほどと変わりません。それでは,実装していきましょう。

 まずは,新たなプロジェクトを作ります。パッケージ・エクスプローラー上で右クリックして,「新規」→「プロジェクト」を選択します。新規プロジェクトのウィザードが表示されるので,一覧から「Android」→「Androidプロジェクト」を選択して次に進みます。

 今回はプロジェクト名を「testSurfaceView」,ビルド・ターゲットは「Google APIs」にチェックを入れます。プロパティーの欄には,アプリケーション名に「testSurfaceView」,パッケージ名に「com.example.game」,Create Activityに「SurfaceActivity」,Min SDK Versionは「3」にします。

 SurfaceActivity.javaは,前回のリスト1の(1)と同様に独自に作成したViewを生成するので,「new SurfaceCircleView(this)」と記述してsetContentViewに設定します。