java - 应用程序在再次打开时加载错误的纹理

标签 java android libgdx

我正在使用 libgdx 库开发游戏。

当我第一次加载程序时,纹理加载完美,一切都很好

enter image description here

当我关闭应用程序并再次加载它时(我假设 Android 以某种方式从内存中缓存它)- 加载了错误的纹理。

enter image description here

如果我从历史记录中清除游戏,然后重试,它会完美运行。

-- 它目前的工作方式如下 - 我使用 SpriteBatch 绘制实际游戏。我有单独的 SpriteBatche 来绘制背景和界面(加载得很好)。在处理关卡时,我处理了 SpriteBatch

for (Block block : world.getDrawableBlocks(this.width, this.height))
        {
            spriteBatch.draw(block.getTexture(1f), block.getPosition().x, block.getPosition().y, block.SIZE_X, block.SIZE_Y);
        }

--

我使用自己编写的缓存加载纹理,以防止同一图像被多次加载。我在创建应用程序时清除缓存。然后我在对象本身中保留一个 Texture/TextureRegion,这是通过 .getTexture()

获得的

这是我用来加载纹理的代码

public static Texture loadTexture(String path)
    {
        //Do we have the texture cached?
        if (textures.containsKey(path))
        {
            //return it
            return textures.get(path);
        }
        else 
        {
            //load it from the filesystem
            Texture texture = new Texture(Gdx.files.internal(path));

            //cache it
            textures.put(path, texture);

            //return it
            return texture;


        }
    }

我附加了一个调试器,正在加载的纹理确实具有正确的路径。

在图片示例中,被交换的纹理恰好是字体的一部分,它从来没有存储在我的缓存中。

--

所以,我宁愿被困在这里。

现在我正在使用在处理时手动终止进程的顽皮解决方案:

 @Override
    public void onDestroy()
    {
        super.onDestroy();
        this.finish();
        android.os.Process.killProcess( android.os.Process.myPid()  ); 
    }

这可行,但很脏。

当进程因异常而失败时,该错误不会发生。


我猜图书馆以某种方式缓存了自己的纹理,这些纹理不知何故被破坏了,但我不知道如何检查,也不知道如何清除它们。

那么,有什么想法吗?

最佳答案

您需要 Dispose() 您创建的所有纹理,因为 textures 循环遍历其所有 value() 并将其放置在单独的方法中,然后在主游戏的屏幕 dispose() 函数中使用该方法.

切换的纹理似乎是BitmapFont,如果UI中使用了那些字体纹理,那么你可能在UI场景中出错了,或者你加载的是JSON文件吗?

在我看来,当您关闭游戏时,您使用的最后一个纹理是字体纹理,它填充场景中使用的纹理。

关于java - 应用程序在再次打开时加载错误的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20758218/

相关文章:

java - 如何使用 SlideMenu 检测 ListView 行单击

java - LibGdx-无法关闭的空白屏幕

android - 错误 ':android:transformKotlinClassesWithJillForDebug' 。在构建用 Kotlin + LibGDX 编写的 Android 应用程序时

java - 如何指定枚举对象数组的 RESTful 资源查询参数

几个小时后恢复应用程序时出现 Android 异常

java - 如何在 Eclipse 的类路径中放置一个 jar?

android - 如何将口音插入到 android 中的 sqlite 表中?

java - Libgdx获取触摸事件的压力

java - 使用空构造函数强制先决条件

java - 如何将自己的.class 添加到已编译的.jar 文件中?