2012-03-17 5 views
1

私はあなたのキャラクターがレベルを移動するトップダウンゲームを作成しました。レベルは本質的に1600x2400 pngです。私はそのpngをメモリにロードすることができませんので、BitmapRegionDecoderを使用してプレーヤがそのレベルを移動する際にチャンクにロードする必要があります。もちろん、これは吸うと吃音につながる可能性があります。私はバックグラウンドスレッドで次のチャンクをロードすることを考えましたが、それはメモリに2つのチャンクがあることを意味しました。現在のものと次のものがOutOfMemoryExceptionにつながります。アンドロイドがvmのメモリサイズを任意の24または32 MBに制限するのはなぜですか?

今、すべてのデバイスは、少なくとも512メガバイトを持っているか、我々はまだVMラム上の愚かな制限がありますか、なぜそうRAM ??どのくらいの量のラムを使うべきかGoogleに教えてくれるのは独裁的だ!私たちは決める!今私はこのBitmapRegionDecoderで得られる悪い性能は言うまでもなく、RAMにすべてをロードすることができないため、さらに多くのCPUサイクルを食べなければなりません!

Googleがこれを行う理由と終了日は何ですか?その決定の背後にある論理的な議論は何ですか?

答えて

2

a)512MB RAMは、あなたのアプリがそれを多く使用できるわけではありません。空きメモリはまだかなり制限されています。だから私はそれが決して終わらないと思う。 VMの量はおそらく増加しますが、互換性を維持したい場合は効率的にコードを作成する必要があります。ネイティブコードの制限がない、あなた自身をJNI/NDK/Cを使用し、メモリを管理することができる)

B(例えば分割画像が巨大な画像からデータをロードしないと)。

+0

私はイメージを分割することについてのアイデアはまったく良いとは思いません。これは、異なるデバイスの画面解像度が異なるためです。私は、作者がゲームをさまざまなデバイス上で似ているようにしようとしていると確信しています。つまり、デバイスよりも画面の解像度が大きい場合は、細かい部分を伸ばしたり、だから、本当のジレンマは、地域をデコードして、Out of Memoryや分割で分割し、場合によっては低品質の製品を得ることができます。そして、このAOS VMのメモリの制限は、今日特に本当に吸います! – Stan

+0

画像をタイルに分割することは、たとえばGoogleマップなどの任意の大きな画像があれば良い考えです。まるでそれが1つのイメージであるかのように表示するために、はるかに多くを行う必要がありますが、イメージサイズの完全な独立性を得ることは明らかです。その例から、正しく行うとぼやけた画像がないことがわかります。 1枚の画像を読み込むのと同じくらい簡単ではありません。 – zapl

+0

が同意すると、私はそれを念頭に置いていました。反対側では、もっと多くの仕事が==遅れたり吃音などになる機会が多くなります。 – Stan

関連する問題