ブレイクセッション

実はブレイクセッションでやってることについて、どれもほとんど予備知識がない状態で参加した。ごめん。なので面白い公演を聞き逃してるかもしれないが、聞いたセッションそのものは、なんかパッとしない感じだった。Android もらったんで、早く家に帰って遊びたい気持ちが強すぎたのかも。

複雑でスケールするアプリを Google App Engine で構築するには

 Google App Engineの予備知識が全然ない上に、Android をもらうのに並んでたんで公演途中から入ったので、ちんぷんかんぷん。
 Google App Engine は複数のコンビュータにデータベースが配置してあって、データはそれぞれバラバラに入っている。クエリー時にコマンドを数千台に投げて帰ってきた答えをマージするみたいな話。

O3D サイトに3Dコンテンツを加えよう

 HTML5 にあった、Javascript で3D描画を行うときの記述についての話。オブジェクト側のプロパティに色とか形とかいろいろ情報を持たせて、イベントやループ内ではパラメータ変更するくらいのことしか書かずにすむとかなんとか。

Android のデータ共有

 スレッド間のデータの受け渡しには、intent から HTML コールまで4段階あって、それぞれ利点欠点があるので用途によって選びましょう。

Android でリアルタイムゲームの開発方法

具体的で面白かったので、このセッションだけたくさんメモした。

・プログラム構造は、経過時間をパラメータにして、ゲームのロジック部と描画部は別スレッドにするといい。つまりタイマーイベントをかけて、そのときの時間によって画面内容を計算して描画コマンドをリストアップし、それを別スレッドで描画する。
・ゲームは作って操作してみて、いろいろ手直ししながら作成していくので、パフォーマンスのみならず拡張性も大事。

TIPS

・ゲーム中にメモリの確保、開放をやらない。GC が起きて何もかも止まってしまうから。開始前にすべて確保しておく。DDMS を使ってメモリ使用状況を確認。
・関数は呼ばない。なるべく static 関数を使う。
・インターフェース経由の呼び出しは遅い。
・JNI処理は速いが呼び出しにオーバーヘッドがかかる。
・なるべくローカル変数を使う。
・floatは遅いけど、まあ気にならない。
SDK にプロファイルツールがあるから活用を。

描画コマンド

Canvas
・使うのが簡単。描画オブジェクトが少なければそれほど遅くない。10スプラインで10ms
OpenGLES
Canvas より速いが呼び出しにオーバーヘッドあり。
Android は OpenGLES 1.0 だが、端末メーカーによってそれ以上サポートしていることも。
glGetString( GL10.GL_EXTENSIONS ) で確認。
・背景描画でタイルの合成をするのに、glTexParameter() が遅い。
・VBOで複数タイルを同時描画するのが速い。(Vertex Buffer Object?)

TIPS

・タッチスクリーンを触ると UI スレッドに物凄い数のイベントがくるので、 onTouchEvent() に sleep() を入れる。16ms から始めて要調整。
・pause, resume はややこしいが、標準コマンド GL_SurfaceView() を使うといい。
Android 1.0-1.5 で indirect buffer で VBO を使おうとするとちゃんと動かずエラーも投げない。動くときもあるが GC がメモリを動かすと変な動き。direct buffer を使う。
その他
・アプリケーションは小さく作る。でかいと端末で邪魔になって消される。2-3MBがベスト。
・どんな機種でも動くようハードウェアキーやトラックボールに依存しないで作るといい。