1

アプリケーションでスプライトシートアニメーションを使用しようとしています。小さなスプライトシートを使用した最初のPOCは正常に機能しましたが、スプライトシートを大きなものに変更すると、「check_safe_call:現在のフレームを復元できませんでした」という警告が表示され、アプリケーションが終了します。

すばやく検索すると、この問題は、アプリがメモリを大量に消費しているか、画像のサイズが大きすぎることを意味していることがわかりました。

私の画像は4.9Mbで、サイズは6720 * 10080(おっと!!)です。私は、iphoneが最大1024 * 1024の寸法の最大3Mbの画像を許可することを読みました。また、スプライトシートの画像の寸法は2の累乗でなければなりません。

だから、こんなに大きなスプライトシートをどうやって使うことができるか教えてください。

1つのアプローチは、スプライトシートを多数の小さなスプライトシートにカットし、一度に1つずつ使用することです。

より大きなスプライトシートに対応するための他の/より良いアプローチを知っているかどうか、そして私のスプライトシートの問題がサイズ(4.9 Mb)または寸法(6720 * 10080)であるかどうかを提案してください。

(参考までに、私は映画を再生しようとはしていないので、代わりにMP4ファイルを使用することはできません。加速度計の入力に基づいてスプライトシートをアニメーション化する必要があり、POCで小さいスプライトシートを使用してそれを実現できました。 。)

ありがとう、Swapnil

4

2 に答える 2

1

説明するように、スプライトシートを複数のテクスチャにカットする必要があります。iPhoneのメモリとグラフィックチップは、そのサイズの画像/テクスチャを一度にメモリに保持することはできません。スプライトシートを分割することにより、使用時に適切なテクスチャをメモリにロード/アンロードします。

また、画像形式の最適化を検討することもできます。PVRTC形式を使用すると、大量のメモリを節約できますが、特定の種類の画像にのみ適しています。詳細については、このAppleページを参照してください。

于 2010-06-01T07:23:26.877 に答える
1

間違いなく2の累乗以内に保持します。また、スプライトシート内のスプライトを2の累乗のコンテナーに保持します(たとえば、17x31のスプライトがあります... 32x32のコンテナーに入れます)。スプライトシートの問題は、4.9MBと寸法の両方です。スプライトシートのサイズを大幅に小さくするには、adobefireworksまたはpngcrusherを使用することを検討します。

スプライトシートを分割することについてのマイクウェラーの権利(あなたは単に1024を最大にすることはできません)。最善の策は、スプライトシートで行っていることを要素に再編成することだと思います(詳細を知らずに言うのは難しいですが)。動くものだけが複数のフレームを持つべきです。それらを(同じスプライトシートからの)背景の上にオーバーレイするために、スプライトシート上のその場所を呼び出し、それらを場に放り込みます。

于 2010-06-16T18:56:14.727 に答える