Androidでゲームを作りましょう!
SIGGRAPH Asia 2009で表題のコース(公式サイト)を聴講した時のログを載せておきます。
タイトル通り、Androidでのゲーム開発に興味がない人には何の意味もないログですいません。(Twitterでだらだらtsudaっていた間は迷惑だった人も多かったはず…応援ももらったけどね!)
- #sa09 Androidでゲーム作るセッションにいる。講演者はゲーム会社に勤めたあとGoogleに入ってLively開発したあとAndroidチームに入って今日に至るようだ。 posted at 14:22:08
- リアルタイム3D脱出ゲー、4人の手によって一週間で作られたらしい。3rd party製。導入がてら人気ゲームアプリの紹介をしている。 posted at 14:26:12
- スプライトを使う描画、どのAPIが速いのか分からなかったので試してみたらしい。サンプルコードとか資料アップロードしてくれないかなー。 posted at 14:28:06
- Replica Island: http://replicaisland.net/ posted at 14:31:06
- HT-03Aで、60hzで動いているらしい。オープンソースで公開予定とのこと。 posted at 14:31:51
- Activityというスレッドみたいなクラスがあって、画面表示には主にこれを使うらしい。一つの画面ごとに一つのActivity。 posted at 14:40:21
- Activityはスタック構造になっている。 posted at 14:40:42
- まだ、調べたらすぐでてきそうな内容やってる: http://www.atmarkit.co.jp/fjava/rensai4/android02/android02_1.html posted at 14:41:37
- 入力を受け付けるGame Threadと画面に表示するRendering Threadの二つに分けるといいのではないか。定石ですね。 posted at 14:53:56
- onTouchEvent onTrackballEvent onKey* をimplementすればとりあえず今ある入力方法全部サポート。 posted at 15:00:45
- sensorManager.registerListenerでSensorManager.SENSOR_DELAY_GAMEオプションを指定すればゲームに適当な頻度でイベントが投げられるようになる。 posted at 15:02:59
- onTouchEventみたいなコールバック内で同じイベントが何度も(time - mLastTouchTime < 32)きたらThread.sleep(32);する。prevent from getting flooded with UI events. posted at 15:06:11
- GCが動くと100ms以上止まるのでゲームの進行を阻害する。GCを毎フレーム呼ぶといい携帯端末もあったらしいけどAndroidのGCは常に時間がかかるのでそれはNG。 posted at 15:08:54
- ゲームが始まる前なんかにRuntime.getRuntime().gc()を呼ぶといいみたい。 posted at 15:10:09
- http://eclipse.org/mat/ でhprofをチェックするとメモリリークを発見できるかも。 posted at 15:11:59
- 「関数ベンチーマック」Local Derived Virtualは同じくらいの速度。Interface経由だと時間がかかる。JNIはもっと時間がかかる。この速度差の理由は調べてないらしい。 posted at 15:14:21
- あ、OpenGL ESの話きた!Canvas(CPU based) vs OpenGL ES(GPU supported). posted at 15:18:23
- SpriteMethodTest can be downloaded at http://code.google.com/p/apps-for-android/ posted at 15:24:21
- draw_texture > VBOs >> Basic Quads > Canvas 前二つはGPUを使うので速い。GL10.GL_EXTENSIONSでサポート状況をチェックしてフォールバックでBasic Quadsをサポートすればおk。 posted at 15:28:56
- 「こうやってだめ」「こう変えてもだめ」「60hz出せないと自分を許せませんでした」ww posted at 15:36:36
- ステージ全体をvertex array上に保持して、範囲を指定してGPUに送るようにしたら60hz出た、らしい。なるほどと思ったけどAPI知らんから何ともアレだな。 posted at 15:40:43
- 今度は3Dの話。Height Mapを使ってステージを描画するテスト。VBO + TextureはNo Texture, Fixed Point(cf. floating point), NDK(C++) Renderと大差ない速さ。Non VBO超遅い。 posted at 15:49:38
- フォントサイズはptよりsp、画素サイズはpxよりdp。 posted at 15:57:18