先日、仕事でAndroid用のADVゲームを作る機会がありました。
せっかくなので、AIR を使って作ってみました。
というか、Java がわからないので AIR しか選択肢がなかったのは内緒です。
ただ、当分 3D の仕事に専念するので次の機会があった時用にメモがてら制作過程を
書いていこうと思います。
作業概要は、windows用ADVゲームのAndroid移植。
なので、正確には一から作ったというわけではありません。
既に、素材(画像、音楽、ゲームスクリプト)が揃ってる段階から作業でしたので
とりあえず、ガシガシ組んでみました。
PCでの動作確認がある程度とれたので、いざ手持ちのAndroid端末で確認してみると
遅い。。。
画像の切り替わりや、移動がカクカクでした。
・背景(1280x720)1枚
・立ち絵(1024x1024以上)最大3枚
・メッセイジウインドウ(1280x260)1枚
が常に表示されている上、立ち絵の移動、フェードがひっきりなしに発生していれば、
やはりAndroidには荷が重い処理だったのでしょう。
そんなわけで、まずはこの問題の解決に挑みました。
解決策の候補として
1.Sprite(bitmap)クラスを使った描画やめて、BitmapDataクラスを使った描画にする
2.GPUの力を借りる
3.ゲーム自体の解像度を下げ処理を軽くする
が思いつきました。
Android端末自身の高解像度化が進んでる昨今なので3のゲーム自体の解像度を下げる方法は却下。
BitmapDataクラスを使った描画は、立ち絵の移動やフェードなどの Sprite(bitmap)クラスに存在する
機能を実装しなければならなかったので、今回は2の方法で問題解決に挑んでみました。
2を選んだ理由には、Android端末でのGPUを使った2D描画がどんなもんかも知りたいというのもあります。
GPUを使った描画でまず最小に思いつくのは、
1 2 |
_sprite.cacheAsBitmap = true; _sprite.cacheAsBitmapMatrix = new Matrix(); |
ただ、この方法はベクター描画処理にのみ高速化の恩恵があるようで、今回のように画像を読み込んで
Bitmapオブジェクトを表示する場合にはあまり効果がありませんでした。
むしろ、遅くなってしまう端末もありました。
そうなると純粋に Stage3D を使う方法が残りますが、Stage3D を2Dの描画として使うには少々不便な
所が出てきます。。。
そこで登場するのが “Starling Framework”
“Starling Framework” は、既存の表示オブジェクトでの描画を Stage3D のGPU描画に置き換えてしまう
便利なフレームワークです。
次回は、Starling での作業をまとめていきたいと思います。