0

我试图将 AssetManager 实施到我的项目中。现在我无法弄清楚我在 AssetManager 上做错了什么。我用谷歌搜索,并尝试了不同的东西。但似乎没有其他人遇到过 AssetManager 的这种问题。我使用了 .finisLoading(),但之后如果我问 .isLoaded,它会说它尚未加载。

这里的wiki教程 是这样说的

manager.load("data/mytexture.png", Texture.class);

……

manager.finishLoading();

...

纹理 tex = manager.get("data/mytexture.png", Texture.class);

我有这个代码

// fullFile e.g. "D:\\folder\\subfolder\\subsubfolder\\jpg.jpg"

if (!new FileHandle(fullFile).exists()) {
    System.err.printf("invalid file \"%s\"\n",fullFile);
    System.exit(1);
}

if (!manager.isLoaded(fullFile,Texture.class)) manager.load(fullFile,Texture.class);
manager.finishLoading();

if (!manager.isLoaded(fullFile,Texture.class)) {
    return = new Sprite(new Texture("D:\\folder\\subfolder\\subsubfolder\\placeholder.jpg"));
} else {
    return new Sprite(manager.get(fullFile,Texture.class));
}

马槽是 AssetManager manager = new AssetManager(new FileHandleResolver() { @Override public FileHandle resolve(String fullFile ) { FileHandle fh = new FileHandle(fullFile); if (!fh.exists()) { System.err.printf("invalid file \"%s\"\n",fh.path()); System.exit(1); } return fh; }

到目前为止我尝试过的

运行 gdx-setup.jar 创建的项目 -> 无法加载文件:badlogic.jpg

代码来自:胡安·哈维尔·卡萨尼

public static void test() {
AbsoluteFileHandleResolver fileHandleResolver = new AbsoluteFileHandleResolver();
AssetManager manager = new AssetManager(fileHandleResolver);
//This could be anywhere else
String fileName = "D:\\blablabla\\my_project\\core\\assets\\badlogic.jpg";

if (!new FileHandle(fileName).exists()) {
    Gdx.app.error("Blub", "invalid file '" + fileName + "'");
    Gdx.app.exit();
}

if (!manager.isLoaded(fileName, Texture.class))
    manager.load(fileName, Texture.class);

manager.finishLoading();

if (manager.isLoaded(fileName, Texture.class))
    Gdx.app.log("Blub", "Texture loaded!");
else
    Gdx.app.log("Blub", "Texture not loaded!");
}

-> Blub:纹理未加载!

Versions: 
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

ashley-1.3.1.jar
box2dlights-1.3.jar
gdx-1.4.1.jar
gdx-ai-1.4.0.jar
gdx-backend-lwjgl-1.4.1.jar
gdx-box2d-1.4.1.jar
gdx-box2d-platform-1.4.1-natives-desktop.jar
gdx-bullet-1.4.1.jar
gdx-bullet-platform-1.4.1-natives-desktop.jar
gdx-controllers-1.4.1.jar
gdx-controllers-desktop-1.4.1.jar
gdx-controllers-platform-1.4.1-natives-desktop.jar
gdx-freetype-1.4.1.jar
gdx-freetype-platform-1.4.1-natives-desktop.jar
gdx-platform-1.4.1-natives-desktop.jar
gdx-tools-1.4.1.jar
jinput-2.0.5.jar
jinput-platform-2.0.5-natives-linux.jar
jinput-platform-2.0.5-natives-osx.jar
jinput-platform-2.0.5-natives-windows.jar
jlayer-1.0.1-gdx.jar
jorbis-0.0.17.jar
jutils-1.0.0.jar
lwjgl-2.9.1.jar
lwjgl-platform-2.9.1-natives-linux.jar
lwjgl-platform-2.9.1-natives-osx.jar
lwjgl-platform-2.9.1-natives-windows.jar
lwjgl_util-2.9.1.jar
4

2 回答 2

1

我刚刚(再次)在这里读到我必须将工作目录设置为your_project_path/core/assets/. 设置后我不知何故忘记了这一步。

但是资产文件夹需要平坦,没有子目录(在桌面上)。

于 2014-12-09T21:32:01.447 回答
0

我假设您使用的是绝对(完整)文件路径(因为在提供的代码中它刚刚注释),但 AssetManager 需要内部(您使用默认构造函数创建它,而不是指定 FileHandleResolver)。我尝试使用您的代码

String fileName = "texture.jpg";

并将 texture.jpg 文件放在 /project/android/assets/ 中,它工作正常。只需将您的内部资产放在该文件夹中,将您的文件路径更改为内部,它应该可以工作。

编辑:

我真的认为使用绝对路径不是一个好主意,因为并非所有后端都接受它,即使您只部署到桌面,将资产放在 jar 之外的位置也是没有意义的。无论如何,这段代码对我有用,对于绝对路径:

      AbsoluteFileHandleResolver fileHandleResolver = new AbsoluteFileHandleResolver();
      AssetManager manager = new AssetManager(fileHandleResolver);
      //This could be anywhere else
      String fileName = "/home/javier/texture.jpg";

      if (!new FileHandle(fileName).exists()) {
            Gdx.app.error(TAG, "invalid file '" + fileName + "'");
            Gdx.app.exit();
      }

      if (!manager.isLoaded(fileName, Texture.class))
            manager.load(fileName, Texture.class);

      manager.finishLoading();

      if (manager.isLoaded(fileName, Texture.class))
            Gdx.app.log(TAG, "Texture loaded!");
      else
            Gdx.app.log(TAG, "Texture not loaded!");
于 2014-12-06T02:23:35.273 回答