arc の日記

はてなダイアリーから引っ越してきました。さらに新しい記事は https://junkato.jp/ja/blog/ で書いています。

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を毎フレーム呼ぶといい携帯端末もあったらしいけどAndroidGCは常に時間がかかるのでそれは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