Android携帯ゲームを作って世界に配信してみよう(2) ―― ゲームの基本構造とタップやフリックの処理を学ぶ

山田 元康

tag: 組み込み

エレキ系DIY 2011年9月29日

3.高速描画やゲーム・ループ用のスレッドの生成/破棄について

 それでは,今回用いたソース・コードの中から,ゲームを開発するにあたって重要な部分について説明していきます.

 

●SurfaceViewを用いて高速描画処理を行う

 今回は画面を管理するクラスとして,Viewのコンテンツ・エリアを自前で描画する場合に最適な「SurfaceView」というクラスを利用しています(リスト1).前回はViewクラスのonDrawメソッドをオーバライドして描画しましたが,SurfaceViewクラスを使うと,それよりも高速に処理することができます.詳しくは,Google社が提供している下記のAPIドキュメントをお読みください.
http://developer.android.com/reference/android/view/SurfaceView.html

 

リスト1 GameView.java(com.spicysoft.android.framwork内に存在)のコードの一部

 

 onKeyDownやonTouchEventなどといったViewのイベントとは別に,SurfaceViewでは表1に示す3種類のイベントが発生します.SurfaceHolder.Callbackインターフェースを実装してリスナとして登録すれば,これらのイベントを受信することができます.

 

表1 SurfaceView独自のイベント

 

●ゲーム・ループ専用のスレッドの生成と破棄の処理

 ゲームは,フレームという単位で,入力処理やオブジェクトの移動などの描画処理を行います.ゲームを滑らかに動作させるには,1秒あたり数十回のフレームが処理される必要があります.専用のスレッドを作成して,その中でループを回しながら高速に処理を行います.このゲーム・ループにて,ゲームに必要な(1)タッチやフリックなどの入力処理やゲーム内のオブジェクトの移動処理,(2)画面への描画処理,(3)一定の秒間フレーム数(フレーム・レート)で処理が行われるような同期処理といったすべての処理を行います(ほかの場所では,入力やオブジェクトの処理,描画を行わない).

 ゲーム・ループの生成と破棄の流れについて解説します.GameViewクラス(GameView.java)のsurfaceCreatedメソッドを見てください(リスト2の(a)).画面(Surface)が生成されたタイミングで,ゲーム・ループ用の処理スレッドを生成して開始します.

 

リスト2 SurfaceViewクラスの3種類のイベント(GameView.javaより抜粋)
surfaceCreatedメソッドでゲーム・ループ用の処理スレッドを生成している.また,surfaceDestroyedメソッドで処理スレッドを中断している.

 

 続いて,その下にあるsurfaceDestroyedメソッドを見てください(リスト2の(b)).ゲームが終わり,画面(Surface)が破棄されるタイミングで,処理スレッドの中断処理を行います.

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日