2017-03-12 29 views
0

我有一个相当简单的问题,那就是让我把我的脑袋从我的桌子上拨开。我的项目使用LibGdx框架,它试图加载一些资产。由于某种原因,它没有在正确的文件夹中看到资产。Libgdx - 无法加载资产依赖关系

这里是我的assetmanager类

public class LevelOneAssets { 
public static final String EARTH_TEXTURE = "earth.png"; 
public static final String MARS_TEXTURE = "mars.png"; 

private static AssetManager am; 

public static Class<Texture> TEXTURE = Texture.class; 

public static AssetManager load(){ 

    am = new AssetManager(new InternalFileHandleResolver()); 
    am.load(EARTH_TEXTURE, TEXTURE); 
    am.load(MARS_TEXTURE, TEXTURE); 
    am.update(); 
    return am; 
}} 

private void init(){ 
     Gdx.app.log("GameScreen", "Initializing"); 
     isInitialized = true; 
     am = LevelOneAssets.load(); 

     world = new World(new Vector2(0f, -9.8f), true); 
     //Add Texture Component 
     engine = new PooledEngine(); 

     RenderingSystem renderingSystem = new RenderingSystem(batch); 
     engine.addSystem(new AnimationSystem()); 
     engine.addSystem(renderingSystem); 
     engine.addSystem(new PhysicsSystem(world)); 

     engine.addSystem(new PhysicsDebugSystem(world, renderingSystem.getCamera())); 
     engine.addSystem(new UselessStateSwapSystem()); 

     am.finishLoading(); 
     Entity e = buildEarth(world); // error here 
     engine.addEntity(e); 

     e = buildMars(world); 
     engine.addEntity(e); 
     engine.addEntity(buildFloorEntity(world)); 

     isInitialized = true; 
    } 

所有资产都是LauchOff/android/assets目录中。有任何想法吗?我正在使用Intellij和gdxVersion = '1.9.6

编辑----

我更新的代码,但我仍然得到Couldn't load dependencies of asset: earth.png。我觉得这是我在Idea中设置的问题,因为我可以用gradle运行代码。以下是我的创意设置的截图。 Idea settings没有太多可以出错的地方...

回答

0

这不是使用AssetManager的正确方法。你有两个选择。

  1. 在游戏线程上同步加载所有内容,等待它完成。排好所有东西后,请致电assetManager.finishLoading()在返回前完全加载所有内容。

  2. 异步加载。这允许您渲染其他内容并在纹理加载到后台线程时继续动画。将所有内容排队后,通过将更新调用放入渲染循环中,连续呼叫assetManager.update()。当一切完成加载时,此方法返回true,并且开始获取对加载资产的引用是安全的。

偏离主题,但我建议不要对AssetManager使用静态引用,因为它很容易出现内存泄漏和黑色纹理。如果您这样做,请确保您的游戏的dispose()方法在资产经理上调用dispose()

0

为什么您使用ExternalFileHandleResolver,您的资源位于您的资产文件夹中,因此请使用InternalFileHandleResolver而不是ExternalFileHandleResolver。当资源是外部的时候使用ExternalFileHandleResolver(如存储在用户手机中的图片)。

public static AssetManager load(){ 
    am = new AssetManager(new InternalFileHandleResolver()); 
    am.load(EARTH_TEXTURE, TEXTURE); 
    am.load(MARS_TEXTURE, TEXTURE); 
    am.finishLoading(); //Load everything synchronously otherwise make continuous call of update() method 
    return am; 
}