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";

/project/android/assets/ に texture.jpg ファイルを配置すると、正常に動作します。内部アセットをそのフォルダーに配置し、ファイルパスを internal に変更するだけで機能します。

編集:

すべてのバックエンドがそれを受け入れるわけではないため、絶対パスを使用することはお勧めできません。また、デスクトップにのみデプロイする場合でも、アセットを 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 に答える