2015-07-11 43 views
0

我的Android应用程序与LibGDX创建有问题。在第一次发布后,游戏中的部分纹理消失,只有在重新启动后(不隐藏并重新打开)才能正常工作。在安装后的第一次启动后,它只发生一次。如果在安装的应用程序上安装,一切正常。LibGDX纹理在第一次启动后的问题安装后

我使用纹理的图集,它是2048x2048。在项目中,我使用AssetLoader类和静态对象。我看到了一些提示,这个问题可能是静态的,但为什么部分纹理通常会加载?

如果有人有这种问题给出建议。

回答

0

我发现这个问题。它不在AssetLoader或纹理中。当我加载游戏对象时,我还在电话资源中重新创建数据,所以当这些数据存在时,所有加载都很好,但如果是第一次,并且需要在手机上创建此数据,则会导致加载资源时出现问题。我只是将“重新创建数据”移到自己的功能上,现在一切正常。

0

这被称为上下文丢失。您加载和创建的纹理会在您隐藏时自动卸载,并且在隐藏和重新打开之间会丢失一些上下文。在隐藏后重新启动或杀死活动应用程序会摧毁当前的JVM,并且当您再次打开它时,它将会重新启动并且一切正常。

为了避免这种情况,您可以通过覆盖ApplicationListener类(这是您的主类继承ApplicationListener)上的pause()和resume()方法来手动管理这种情况。您应该在暂停()时卸载/处理资产,并在resume()上重新加载/创建它们。

这不是最好的,但给一个想法,你可以有问题的在这里看到一个实现“编辑:”部分:LIBGDX White textures in the first run on android

但我强烈建议,以避免静电场,并使用AssetManager类加载并获得纹理, TextureAtlases和其他资产。让它为你管理纹理。

看看:https://github.com/libgdx/libgdx/wiki/Managing-your-assets

+0

谢谢,但重写暂停和恢复方法并没有帮助.. 我的游戏大部分已完成,AssetLoader类很庞大。我了解AssetManager并将其用于下一个项目。 我认为,重写并没有帮助,因为这种损失不会导致隐藏和重新打开后,但只在第一次启动。之后,我可以隐藏和重新打开我的应用程序多次,因为我可以,并且一切都会正常工作。 –

+0

另一个奇怪的事情是,我的店铺屏幕加载总是很好,我可以改变游戏对象的纹理,但是当我返回到菜单屏幕或游戏屏幕,没有任何变化。也许这是因为AssetLoader.loadShop()我每次创建商店屏幕时使用,并且每当我关闭商店屏幕时处理它,但游戏和菜单屏幕的对象只有在方法create()中AssetLoader.load()和方法中配置AssetLoader.dispose ()(现在也用你的建议暂停方法dispose()和恢复方法加载)。 所有的音乐,声音和字体,甚至一些纹理,加载良好,并始终工作。 –

+0

您是否避开静态字段? 您的店铺屏幕加载总是很好,因为正如您所说,您每次加载时都会再次创建它。 –