1

cocos2dでアプリを開発しています。アプリのアーキテクチャは非常にシンプルです。6 つのサブメニューから 1 つを選択できるメイン メニュー。タップするとサブメニューが起動します。メイン メニューには、Retina iPad で約 408 MB (removeUnusedTextures メソッドを使用しているため、最大 450 MB) かかったすべてのテクスチャをロードした後、高解像度 (Retina iPad の場合) のテクスチャが多数あります。

そして今、テクスチャを最適化する 2 つのシナリオがあります。

最初:アプリの開始時と、他のテクスチャが必要なときに最小限のテクスチャ セットをロードしています。

欠点:ディスクからデータをロードするためにアプリが一瞬フリーズするときにテクスチャをロードするとき。すべての cocos2d クラスがスレッド セーフであるとは限らず、すべてのテクスチャが同じ id( ) を使用していないと cocos が不平を言っているため、GCD を使用してテクスチャをロードできませんCCSprite is not using the same texture id。(注: を使用して *.pvr.ccz ファイルをロードしていますCCSpriteBatchNode

2 番目: シーンの最初にすべてのテクスチャをロードします。

欠点:メモリ内でしばらくの間シーンを切り替えると、2 つのシーン (メニューとサブメニュー、特にサブメニューからメイン メニューに戻る場合) からのリソースが存在します。そのため、メモリが 600MB に増加し、iOS はアプリを強制終了し、クラッシュし、ハルマゲドンを引き起こします。

この問題を解決するには?インターネットで何かを見つけようとしましたが、運がありませんでした。

PS TexturePacker を使用して、テクスチャをできる限り最適化しました。

4

1 に答える 1

1

メモリ内の 2 つのシーンの問題を回避するには、「読み込み中」のテキストまたはグラフィックを表示するだけの休憩 (読み込み) シーンを間に追加するだけです。ローディング シーンに切り替えると、次のシーンをロードする前に古いシーンの割り当てを解除する時間があります。

色深度を 32 ビットから 16 ビットに減らすことで、テクスチャ メモリの使用量を半分に削減することもできます。特に Retina 画像では、適切なカラー ディザリングとの違いは、不可能ではないにしても、見分けるのは困難です。

また、CCTextureCache の loadImageAsync メソッドを使用してバックグラウンドでテクスチャをロードすることもできます。ただし、そのテクスチャを使用してスプライトを作成する前に、テクスチャがロードされるのを待つ必要があるため、実際には何も得られません。

于 2013-10-05T09:24:14.233 に答える