2

我正在开发一个游戏,我在触摸场景中显示不同的精灵。每个场景都有一组(大约 10 个精灵),根据用户操作显示和删除。当用户导航到下一个场景时,我加载该场景的精灵并从缓存中删除第一个场景的精灵。我注意到场景更改时存在少量内存泄漏,并且引脚指向在 1s 场景中创建的 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 回答