2

タッチ時にシーンにさまざまなスプライトを表示するゲームを開発しています。各シーンには、ユーザーのアクションに基づいて表示および削除される一連の (約 10 個のスプライト) があります。ユーザーが次のシーンに移動すると、そのシーンのスプライトを読み込み、最初のシーンのスプライトをキャッシュから削除します。シーンの変更時に小さなメモリ リークが発生し、ピンが 1 秒のシーンで作成された TiledTextureRegion 変数を指していることに気付きました。

sprite.reset() 呼び出しを試みましたが、役に立ちませんでした。シーンからスプライトを削除しています。スプライトの削除コードは次のようになります。

    private void removeSprite(final AnimatedSprite sprite) {
    final PhysicsConnector facePhysicsConnector = this.mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(sprite);

    this.mPhysicsWorld.unregisterPhysicsConnector(facePhysicsConnector);
    this.mPhysicsWorld.destroyBody(facePhysicsConnector.getBody());

    this.mScene.unregisterTouchArea(sprite);
    this.mScene.detachChild(sprite);

    System.gc();
}

しかし、スプライトに関連付けられた TiledTextureRegion オブジェクトをクリアしていないようです。アプリにはさまざまなシーンがたくさんあるので、メモリリークが加算されて問題が発生するのではないかと心配しています. どんなアイデアや提案でも大歓迎です。ありがとう!!

4

1 に答える 1

1

クリアはできませんが、 でクリアTiledTextureRegionできBitmapTextureAtlasますBitmapTextureAtlas.unload();

例えば:

BitmapTextureAtlas Texture1 = new BitmapTextureAtlas(null, 1024, 1024, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
mEngine.getTextureManager().loadTexture(Texture7);
ITextureRegion example = BitmapTextureAtlasTextureRegionFactory.createFromAsset(Texture1, this, "picture.png", 0, 0);

そして、必要なときに:

Texture1.unload();

ただし、TiledTextureRegion を再度使用するため、おそらくメモリをクリアする必要はありません。TiledTextureRegion を再作成すると、アプリケーションが遅くなります。

于 2012-07-27T23:11:23.277 に答える