様々なラッピングを施して、iアプリ環境の自作 Virtual Machine を
Android への移植が8割程完了した。
以前作成したゲームコンテンツは問題なく動作。
完全同一の VM コードで、プラットフォームを飛び越えてゲームが動く事に
すげー感動。
VM の満足度は 3割ほど。「何でも、どこでも、高機能に」動かせることを
目標にしてます。
あとは Graphics3D 関連の一部 API や、画面タッチのイベントを MIDP と
Android で VM 上で吸収して実装する必要がある。
ここ2日間、ずーっと自宅で Android エミュに付きっ切りだったので様々な
事実を理解できた。
ハマる箇所は多い。とくに lockCanvas() unlockCanvasAndPost() を iアプリの
ようなダブルバッファリングをイメージしているとハマる。
概念としては DirectDraw 時代のフリッピングと似ている。
プライマリとバックバッファを切り替える。
基本的に毎フレーム全描画を行うか、領域を指定して描画しないと意図しない
現象が 起きたように 見える。
一枚なにか描画して lockCanvas() / unlockCanvasAndPost() の間に何も描画
しない処理を入れ、それを繰り返すとわかりやすい。
一つ前に転送した画面と、現在の画面が交互に表示されることが確認できる。
あとサウンド関連で midi を鳴らしているのだけど、エミュ上では場合により
onCompletion() によるループ再生が行われないときがある。
この場合 seekTo() を行った後、Thread.yield(); で他のタスクに優先度を
上げてやると9割方解決。10割にはまだ届かない。
0 コメント:
コメントを投稿