夏のコミケ「コミックマーケット84」の準備を進行中。
月曜日 東地区“ポ”ブロック−33b「るてんのお部屋」
この数日で、Androidアプリ版のコーディングをしました。もう何というかAndroidバグ多過ぎ……。プログラムを書いているというよりも、Androidのバグを調べて、回避策を調べたり実験をし続ける感じでした。何とかならないのかなあ。
□コミケ84 サンプル 011(※ 音が出ます)
Androidアプリ版のスクリーンショット
さて、ブラウザ以外の実装として、XUL runnerアプリとAndroidアプリを作成したので、開発のメモを書いておこうと思います。
こういったブラウザ以外の実行環境で見られる現象としては、ブラウザのクライアント領域のheightが、タイミングによって上手く取れないことです。
0から始まり、最終的な値に徐々に大きくなっていったりします。たぶん、ブラウザのコンポーネントをアプリに配置する際に、URLが読み込まれた後にサイズを調整しているのではと勘ぐっています。
何だか、そう思うような現象に、何度か出会っています。
後は、Androidの2.3以上対応にしたのですが(私の使っているSH-12Cが2.3)、2.3と4.2は挙動が違っていました。各OSのバージョンでチェックしておかないと痛い目に遭います。同じ処理をしているのに、挙動が違うので。
それと高速化は大切だなあと思いました。画像の描画時に座標を整数だけにするとか、Contextのスタイル変更処理をソートして、極力設定を変えないようにするとか、そういった施策を行うと随分遊べるようになります。
あと、Androidの標準ブラウザと、WebViewでは、微妙に挙動が違うので、ブラウザで動いていたからと安心していると危険です。特にアプリ起動時の処理が重くて色々と問題が出るので、注意が必要でした。
また、これは本筋とは違いますが、Androidの高速エミュレータ(InterlのCPU仮想化技術)を使うために、PCのBIOSの設定を変更しました。
これが、けっこう大変でした。うちのPCは春先に修理でメーカーに送っていたのですが、なぜかBIOS設定の画面に入れなくなっていました。なぜだ?
そこでサポートに電話して、色々と実験をしていると、モニターだけ認識していないことが判明。画面が出ていることを前提にキーボードを操作すると、操作ができている……。
その後、色々と調べた結果、修理の段階でBIOSを「最も古いもの」にダウングレードされていたために、モニターを認識していなかったことが分かりました。ガックリ。
PCを買った時(工場出荷時)よりも、古いBIOSにされていたとは……。
そこでBIOSのアップデートを掛けたのですが、そうすると今度はPCが起動しなくなりました。
結局修復を何度か掛けて、ようやくPCが起動するようになった時点で、BIOS設定の変更を試みてから半日が経っていました。死ねる。
何か色々と大変でした。
今回一番頭が痛かったのは、AndroidのclearRectのバグです。
一定以上の面積を一度にクリアしようとすると、処理落ちしてクリアに失敗します。なので、小さい面積に分割して、複数回のクリアを掛けないといけないです。
さらに頭が痛いことは、そうやって複数回に分割しても、1フレーム内で、複数のCanvas(レイヤーとして使用している)を一気にクリアしようとすると、やはり処理落ちしてクリアに失敗します。
そこで、シーン遷移時の全レイヤークリア処理を、複数のフレームで分割して行うという、無駄の極地とも言うべき処理を実装しなければいけませんでした。徒労感MAXです。
また、今回、Android2.3まで対応させるために、少し変わった処理を組み込みました。実行時のfpsを見て、45fpsを切ると、自動で低速レンダリングモードに切り替わる処理です。
具体的には、攻撃のエフェクトがチープになります。
こういった環境による描画処理の切り替えは、昔Android1.6の頃に「EX Reversi」を開発した時に組み込んでいました。その時は画像データのDLができない環境では、画像なしでレンダリングをするというモードでしたが。
なので、ある程度遅い機種でも、どうにか遊べるようになりました。
というわけで、Androidの実装が終わったので、コードを整理して、バランス調整に入っていこうと思います。