Retina 対応の cocos2d ゲームを開発しています。網膜と非網膜の両方のプロジェクトに多くの画像を追加しました。ゲームはシミュレーター [網膜と非網膜の両方] で正常に動作し、非網膜デバイスでも完全に動作します。しかし、Retina 対応デバイスで同じことを実行すると、メッセージが表示されずにクラッシュすることを意味します。インストルメント アプリケーションでゲームをテストすると、[http://screencast.com/t/sfRDTELrhomC] のようなメモリ不足の警告メッセージが表示されます。アプリがクラッシュした場合 Retina 対応デバイスで実行中に、コンソールにエラー メッセージが表示されません。私は現在の状態とひどく混乱しています。誰かがこの問題で私を助けてくれます.
1 に答える
画像をロードするために大量のメモリを使用している可能性が高いため、デバイスのメモリが不足し、アプリケーションが強制終了されます。
PNGを使用していると思います(これに関する情報を提供していないため)。PNG や JPG などから画像を読み込むと、画像は cocos によってテクスチャに「変換」される必要があるため、メモリに 2 回読み込まれます。また、この操作のテクスチャ サイズは 2 のべき乗でなければならないため、150x150 の画像は 256x256 の画像のメモリを使用します。これは多くの無駄なメモリです。
私の最初の提案は、Texture Packer を購入することです (私は決して彼らと提携していません。これは単なる素晴らしいソフトウェアです)。これは、画像を取得して、1 つのテクスチャに複数の画像を含む圧縮された PVR スプライト シートにそれらを作成します。
PVR ファイルはテクスチャに直接読み込まれるため、二重のメモリを使用せず、スプライト シートであるため、無駄なピクセルが少なくなります。
私の 2 番目の提案は、画像をロードするときに、実行ループの同じティックですべてを実行しないことです。Cocos は多くの自動解放を使用し、そのメモリはティックの終わりまでクリアされないため、すべての画像を一度に同じメソッドでメモリにロードする代わりに、そのメソッドが数回呼び出されるようにスケジュールし、毎回新しいファイルをロードします。 .