2012-03-31 14 views
6

android.Like tower defenseでゲームを開発しています。 私は表面ビューを使用しています。私はビットマップとしていくつかの画像を使用しています(スプライトシート、タイルセット、ボタン、背景、エフェクト対) 今私のゲームを実行すると、私はこのエラーがほぼ5-6 mb.And画像です:ゲーム開発時にビットマップサイズがVM予算を超えています

ビットマップのサイズは、VMの予算にこのプロセスには大きすぎ

19464192バイトの外部割り当てを超えています。

私はその

BitmapFactory.decodeResource(res, id) 

のような画像を呼び出し、私は配列にそれを置きます。 画像を拡大/縮小できません。これらはすべて使用しています。 は私が

options.inPurgeable=true; 

、それは動作しますが、画像はそれで非常にspritesheet slowly.I負荷をロードしているし、それがロードされたときは、私は非常に非常に低いFPSを得ることを試みました。

どうすればよいですか?

答えて

0

私はゲーム開発者ではありませんが、私はAndroidを十分に知っていると思っています。

サイズの画像をロードすると、エラーが発生する可能性がほぼあります。画像ファイルのサイズはなぜですか?

http://p-xr.com/android-tutorial-how-to-paint-animate-loop-and-remove-a-sprite/に例があります。あなたは彼に爆発スプライトが〜200Kbしかないことに気づいた場合。より詳細な画像であっても、それ以上のファイル容量は必要ありません。

OKいくつかの提案:あなたは

  • を単一のシート上にすべてごspritesheetsをロードするか、別々のファイルに 各spritesheetでいますか?それらがすべて1つの場合、私は を分割します。画像の解像度

  • 下、Androidデバイスは と一部のみ低解像度のスクリーンを有するポータブルです。たとえば、HTC Wildfireの解像度は240x320(LDPIデバイス)で、かなりのデバイスは です。あなたは画像の寸法を明記していないので、これが実用的かどうかはわかりません。

最後に、私はゲームプログラマーではありませんが、私はこのチュートリアル(同じシリーズの一部)がかなり啓発されていることを発見しました - http://p-xr.com/android-tutorial-2d-canvas-graphics/。私はあなたがAndroidには適していないパターンを適用しているのだろうかと思いますが、コードなしでは私は言うことができません。

右何か少しオフトピックしかし、注目すべき...見積もりの​​下

人々ビューの力。 SurfaceViewを使用するには一定の論理量がありますが、標準のViewはそれ自身で非常に多くの作業を行います。 SurfaceViewは、動作させるために、基礎となるスレッドを実行する必要があります(自分でセットアップする必要があります)。ただし、ビューはonDraw()を呼び出します。これは、postinvalidate()メソッド(What does postInvalidate() do?参照)を含むさまざまな方法で利用できます。

いずれにしても、このチュートリアルhttp://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/をチェックする価値があります。個人的には、それはカスタムビューの優れた例であり、それらで何ができるのですか。私はいくつかのセクションを書き直し、ポケットウォッチアプリを作った。

+0

私はあなたの助けに感謝しますが、私は解決できません。 アニメーションが多すぎるため大きなスプライトシートを使用します。たとえば、これはゲームのスプライトシートです。 http://nafiz.in/bigeye.png 私はgalaxyを使用していますが、このスプライトシートをフルサイズで使用しています。 Firsly私は自分のデバイスでそれを動作させる必要があります。 おそらく、ビットマップに7-8Mbの制限があります。私は再び調査を行い、この問題を解決するためにjniまたはopenglを使用する必要があることを発見しました。しかし、その点、私はそれらを使用できません。いくつかのアニメーションとヒープ管理に取り組んでいます。 –

2

私もこの問題を抱えていました。一度に読み込んだビットマップの数/サイズを減らすこと以外の解決策はありません。古いAndroid搭載デバイスの中には、アプリケーション全体のヒープに16MBしか割り当てられていないものもあります。ビットマップは、一度ロードすると非圧縮でメモリに保存されるため、大きな背景などでは16MBを超えることはありません(約854x480,32ビットのビットマップは私のゲームでは、私が現在のレベルで使うつもりのビットマップをロードするだけで済むようになりました(例えば、バックグラウンド用の単一のBitmapオブジェクトがそれぞれリソースからリロードされます)。メモリ内に複数のビットマップを保持するのではなく、変更した時点で変更する必要があります。アニメーションのサイズを小さくします。代わりに、リソースからのロードは非常に速いので、キャラクターの現在の方向のアニメーションストリップをロードするだけのようなことをやり遂げることができます。しかしそれは複雑になるかもしれません。

また、すべてのデバイスの問題を解決したことを確認するために、VMヒープを16MBに設定してエミュレータでアプリケーションをテストすることを強くお勧めします。 (通常、エミュレータのデフォルトは24MBであるため、テストしてからリリース後にいくつかの1つ星レビューを生成するのは簡単です)。

関連する問題