1

github (Weikuan Zhou) の最新ビルドを使用して、Cocos2d フレームワークを使用して Android でゲームを開発しています。

私のゲームでは、たくさんの画像を使用しました (合計画像サイズは約 11MB です)。

問題: ゲームを 3 回以上プレイすると、画像ではなくブラック ボックスが表示されます。

問題を再現する手順は何ですか? 1. ゲームの「再プレイ」機能を使用して 3 回以上ゲームをプレイした場合。

期待される出力は何ですか?代わりに何が見えますか?- の代わりに画像を適切に表示する必要があります"BLACK BOX"

私のlogcatでは、ヒープメモリが約13Mbになることがわかります。

  • 以下の方法ですでにテクスチャをリリースしています

CCTextureCache.sharedTextureCache().removeAllTextures();

また、スプライトを手動で削除しようとしました。removeChild()方法。

しかし、これまでのところ、解決策を見つけることに成功していません。

誰かがこれに対する解決策を持っている場合は、私に知らせてください。

4

2 に答える 2

0

あなたが説明していることから、あなたは私がしたのとまったく同じ問題にぶつかっています.Android用のcocos2dは、個別にロードされた多くの単一のスプライトを扱うときに本当にバグがあります.

この問題を解決するための最善の方法は、(Mac を持っていない限り) ここから zwoptex の無料のフラッシュ バージョンを入手することですhttp://zwopple.com/zwoptex/static/downloads/zwoptex-flashversion.zip

これにより、スプライトシートを作成できます。各シートにできるだけ多くのスプライトを関連付けることをお勧めします。

これは主に、通常のスプライトではスプライトごとに 1 回のレンダリングを行うのではなく、cocos がスプライトシート内のすべてのスプライトに対して 1 回のレンダリングを行うためです。したがって、処理時間が大幅に短縮され、メモリ使用量が大幅に削減されます。

次に、次のようなコードでスプライトシートをロードできます(構造化されたプロジェクトからスニペットを取得しているため、このコードが実行されることは保証できませんが、適切なソリューションにつながります)

CCSpriteFrameCache.sharedSpriteFrameCache().addSpriteFrames("menus.plist");  // loads the spritesheet into the frame cache
CCSpriteSheet menuSpriteSheet = CCSpriteSheet.spriteSheet("menus.png", 20); // loads the spritesheet from the cache ready for use

.... // menu is a CCLayer
    CCSprite sprite = CCSprite.sprite(CCSpriteFrameCache.sharedSpriteFrameCache().spriteFrameByName("name of sprite from inside spritesheet.png"));

menuSpriteSheet.addChild(sprite, 1, 1); /  you add the sprite to its spritesheet
menu.addChild(menuSpriteSheet, 1);  // then add the spritesheet to the layer
于 2012-04-26T14:53:29.467 に答える
0

この問題は、実行時にリソースをロードするときに発生します。そのため、シーンが始まる前にリソースをロードすることをお勧めします。次のようにできます。

  1. ゲーム内のリソースにスプライト シートを使用する。
  2. クラスのコンストラクターで Ui を実装します。
  3. レイヤーのオーバーライドされたメソッド onEnter() で機能を実装します。
  4. シーンを終了したら、スプライト シートをアンロードする必要があります。

これらは私が従っている手順です。ありがとう。

于 2013-08-13T12:45:57.597 に答える