android - Andengine中如何配置TiledTextureRegion

标签 android memory-leaks andengine

我正在开发一款游戏,我在触摸场景时会显示不同的 Sprite 。每个场景都有一组(大约 10 个 Sprite ),它们根据用户操作显示和移除。当用户导航到下一个场景时,我加载该场景的 Sprite 并从缓存中删除第一个场景的 Sprite 。我注意到场景更改时有一个小的内存泄漏,并且 pin 指向在 1s 场景上创建的 TiledTextureRegion 变量。

我试过调用 sprite.reset() 但没有用。我正在从场景中移除 Sprite 。这是删除 Sprite 代码的样子:

    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();
}

但看起来它没有清除与 sprite 关联的 TiledTextureRegion 对象。因为,我的应用程序中会有很多不同的场景,我担心内存泄漏会累积起来并导致问题。 任何想法或建议将不胜感激。 谢谢!!

最佳答案

您无法清除 TiledTextureRegion,但您可以使用 BitmapTextureAtlas.unload(); 清除 BitmapTextureAtlas

例如:

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,这会减慢您的应用程序。

关于android - Andengine中如何配置TiledTextureRegion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11695532/

相关文章:

android - 使用 andengine 在动态壁纸中显示当前时间的最佳方式是什么?

java - 当与另一个物体碰撞时旋转/旋转物体

java - 在 Retrofit 调用后更改折叠工具栏标题

android - 如何为使用 Amazon DynamoDB 的 Android 应用程序添加推送通知?

android - 没有 url 的 TextView 上的超链接未显示且不可单击

Python/Django 轮询数据库有内存泄漏

java - 碰撞检测在低 FPS 时失败(Andengine)

android - 如何在回收站 View (网格布局)中显示图像?

android - 在进程死亡时以编程方式处理取消注册 BroadcastReceiver

tomcat - 部署到tomcat时出现线程本地错误