■
Android (携帯アプリ互換編)
[android.swf]
iアプリでの定石(なのかも微妙だけど)だと、アプリケーション本体であるIApplicationと描画用のCanvasを継承したクラスを1つずつ用意して、
Canvasのメソッド内でメインループを回すのが一般的だと思います。
メインループはwhile()で回して、System.getCurrentMiils()を見ながらFPSを調整、キー情報はループ毎にポーリングして、
描画はCanvasから取得したGraphicsにlock/unlockして描画みたいな。AndroidではIApplocationに相当するものがActivity。 描画はCanvasそのものに描くのではなくて、View#OnDraw()で引数として渡されるCanvasに描画。 メインループは、Handlerで定期的に内部処理と描画の更新を行うというのが作法(?)みたいですね。
速度や正確さを求めると結局はwhile()で回すことになるのかもしれないけど、 携帯アプリみたいにほぼシングルスレッドで動作するわけでもなさそうなので、とりあえずは奇麗な方法で。 キー情報はonKeyイベントが発生するまで状態を取得する手段が無いっぽいので、 イベントハンドラでキー状態を保持するようにKeyPadStateクラスを作成しました。 とりあえずメインループとキー情報が取れて、描画対象が1枚だけということになれば携帯アプリと同じような感覚で作れるかなー、 ということで三角形が動くだけのサンプルでも置いておきます。
android_sample.zip
(3.70KB)
描画関係だと、あとはスプライトとして使っていたImageはDrawableで代用。 背景なんかは従来通りにBitmapで保持して、BitmapDrawableで描画すればなんとかなりそう。 ダブルバッファリングはonDraw()の最中に表示スクリーンが再描画されることはないので、特に意識する必要はなさそう。 シーン管理を書けばゲームっぽいものなら作れる気がしますね。
あと必要そうなのは、データの読み書きと通信処理、サウンド機能。OpenGLとか3D関連は苦手。 端末機能は当面使わないので保留。公式のサンプルコードはじっくり読むとかなり参考になるので、 ドキュメントと合わせてもう少し勉強します。
posted at 23:59 [ /tech/android ]







