2

Cocos2d を使用してコンテンツのマップ (技術的にはグラフ理論の意味での大きなツリー) を作成するアプリを構築しています。各ノードは独自のテクスチャを持つスプライトで表され、リーフ ノードはすべて 2 番目の「ボタンが押された」テクスチャを持ちます。さらに、一部のノードは PNG アニメーションです。130 ほどのノード テクスチャを含む 1 つのスプライト シートと、アニメーション用の 3 つのスプライト シートがあります。これら 4 つのファイルをすべて合計すると、約 18.4 MB になります。

アプリを実行し、cocos2d 部分を実行しない場合 (つまり、フレームワークをまったく起動しないため、テクスチャをロードしない場合)、アプリは約 10 MB で実行されます。Cocos2d とそれらのスプライト シートを読み込むと、メモリが 90 MB を超えて急増します。

私の調査によると、私は可能な限り最も効率的な方法で物事を行っているようですが、メモリ使用量がすでに非常に高いため、iPad 1 で多くのメモリ関連のクラッシュが発生しています。

これは cocos2d では正常ですか? 画像自体はそれほど大きくないので、スプライトの数の分だけメモリを消費しているのでしょうか。メモリフットプリントを下げる方法はありますか? 私は途方に暮れていて、非常に銃の下にいます...

4

1 に答える 1

3

スプライトを大きなスプライト シートにまとめることで達成される効率は、保存されたメモリではなく、レンダリング時間で測定されることがわかりました。UIImage であっても、Cocos2d のような OpenGL フレームワークであっても、画像をロードするときのメモリ使用量は、幅 x 高さ x ピクセルあたりのバイト数です。したがって、2048x2048 の png 画像は、メモリ内で 2048x2048x4 バイト (12 MB) を占有します。

この場合にメモリを抑えるには、必要に応じてロードし、不要になったらすぐにアンロードする必要があります。ここでの秘訣は、ロードする場所とタイミングを見つけることです。そのため、ユーザーは途切れることがありません。楽しい!

于 2011-08-03T23:15:15.500 に答える