FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » ゲーム »Android で CG Puzzler?

Android で CG Puzzler?  



 CG PuzzlerJavaで作ってあります。そんでもって Android も Java なので、ちょっとだけ移植でもしてみようかな~、と作ってみました。大まかな機能は移植できましたね。でも Applet と Android ではコンポーネントが全然違うので、1から書き直しでした。アルゴリズムはそのままですが、せっかくなのでスマホ特有のタッチで動かしたいと思い、データ構造は変えてしまいましたけどね。交差パズルも切り替えできます。今の所、画像はネットからではなく、内部リソースに持ってしまってますけどね。


 画像は Android SDK のエミュレータです。実機でもほぼ同じ感じになりますね。

 ただ少し重いですね。 Java の欠点として、Applet も含めて画像処理が遅い。そこで表示部分を司っている View を SurfaceView に変えてみたのですが、原因不明のバグが出る。なぜかわからないけど、たまに画面がフラッシュしたように点滅するんですね。なんだ?この現象は?ってググってみたけど、あまり有益な情報が見つからない。ただ、SurfaceView って言うのは高速描画を実現するためにダブルバッファリングを行ってるそうだ。つまり表、裏の2画面を持っていて、どちらかに書き込み、描き終わった方を表示するみたいな。これはファミコン時代から使われていた技術で、交互に表示することで、描き中の時間稼ぎができる。実際’80年代頃のPCゲームでは一部描画中が見えてたりしましたね。

 とりあえずこのダブルバッファリングが上手くいってないんじゃないかなー、と想定しました。というのは私の使っている実機は Android2.2 でそのレベルでコンパイルしてるんですよね。簡単なものなので、最新の実機でなくとも動くだろうと。でもその分CPUも遅い。「たまになる」ことからもこのバッファリングと切り替えが追いつかず、点滅してるように見えるんじゃないか?ってね。

 あと Canvas に直接描かずに、画像バッファを独自に作って、そこに描画、最後に Canvas にそのバッファ画像を出力みたいな、いわゆるオフスクリーンバッファのやり方にも変更してみました。この方がチラツキは少ない。実は Applet もこの方法を使ってますね。これで大きな画像でやってみたらどうか?と実験したら、まだ点滅現象が起きる。しかし試しに画像を小さくすると起きない。やはり画像サイズが大きくなると処理が追いついてないらしい?

 あとは ScheduledExecutorService によるタイマーで時間経過処理を行っているので、このせいで、SurfaceHolder に割り込みが起ってることも考えて、Synchronized で一部データを同期してみたりしたんですが、点滅現象はまだ起こる。

 うーん、メンドイ。とりあえず動けば良いやと思って、タイマー処理を独自 Thread に Handler で監視させる昔のやり方に戻しました。そしたら、点滅しなくなった(笑)。

 Applet のときもブロック崩しでは少し実行速度が遅いと感じていたので、ネットで調べたら、画像系は Image オブジェクトよりも BufferedImage の方が早い、とありましたが、やってみたら早くは感じなかったですね。もしかしたら後から出た機能は、やはりその時代の実機や最新のものでないと合わないのかもですね。少し前のモデルにも対応させたかったら、少し前のやり方の方が問題なく動作する。確かに多少重いけど、怪現象が起こるよりはましって感じでした(笑)。

 あとは外部サーバーから画像や設定などを読み込めるようにしたら、ほぼ完成でもいいが、サンプルとしてはこのままでもいけるかな。Androidマーケットは初回登録料必要だったっけ?面倒だったら野良アプリで良いかな(笑)。

[つかさんパズル]
Applet 版のサンプル(PC[IE]でアクセス)
Android 版のサンプル(Android2.2以降でアクセス)

※キャラクター画像は「著作権フリー立ちキャラクター素材集」を使用しています。
イラスト:こばP さん

著作権フリーキャラクター素材集


(関連記事)
Android と Applet の互換ってできるもんだね
【Android】【Applet】【Java】interface と abstract の使い方・違いとは~簡単なフレームワークを作って、考えてみる
【Android】【Applet】【Java】interface を使って独自のラッパークラスを作る
【Android】【Applet】【Java】interface を使ってインスタンスを生成する


関連記事
スポンサーサイト



category: ゲーム

thread: ゲーム開発

janre: コンピュータ

tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/79-26a0d5df
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR