AssetManager не удается разрешить зависимости tmx-файла LibGDX

#libgdx #tiled

#libgdx #tiled

Вопрос:

Пожалуйста, объясните мне, где я ошибаюсь. Вот мой код. Я пытался загрузить уровень, который я разработал в tile, в LibGDX, но столкнулся с

 Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load dependencies of asset: level_1_better.tmx
  

Вот мой TileTest.java файл

 package com.mygdx.game.mytile;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.maps.MapProperties;
import com.badlogic.gdx.maps.tiled.TiledMap;
import com.badlogic.gdx.maps.tiled.TiledMapRenderer;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;

public class TileTest extends ApplicationAdapter {
    private TiledMap map;
    private TiledMapRenderer renderer;
    private OrthographicCamera camera;
    private AssetManager manager;
    private Integer tileWidth;
    private Integer tileHeight;
    private Integer mapWidthInTiles;
    private Integer mapHeightInTiles;
    private int mapWidthInPixels;
    private int mapHeightInPixels;
    
    @Override
    public void create () {
        manager = new AssetManager();
        manager.setLoader(TiledMap.class, new TmxMapLoader());
        manager.load("level_1_better.tmx", TiledMap.class);
        manager.finishLoading();

        map = manager.get("level_1_better.tmx", TiledMap.class);
        
        MapProperties properties = map.getProperties();
        tileWidth         = properties.get("tilewidth", Integer.class);
        tileHeight        = properties.get("tileheight", Integer.class);
        mapWidthInTiles   = properties.get("width", Integer.class);
        mapHeightInTiles  = properties.get("height", Integer.class);
        mapWidthInPixels  = mapWidthInTiles  * tileWidth;
        mapHeightInPixels = mapHeightInTiles * tileHeight;
    
        camera = new OrthographicCamera(320.f, 180.f);
        camera.position.x = mapWidthInPixels * .5f;
        camera.position.y = mapHeightInPixels * .35f;
        
        renderer = new OrthogonalTiledMapRenderer(map);
        
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(.5f, .7f, .9f, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        camera.update();
        renderer.setView(camera);
        renderer.render();      
    }
    
    @Override
    public void dispose () {
        manager.dispose(); 
    }
}
  

Мой файл level_1_better.tmx находится в корневом каталоге папки assets. А hyptosis_tile-art-batch-1.png — это лист спрайтов, на который он ссылается для создания уровня плитки.

Ответ №1:

Это потому, что не удается найти что-либо, на что ссылается ваш level_1_better.tmx файл.

Это может быть, например, набор листов и / или изображения, составляющие набор листов. Если вы откроете .tmx-файл, вы увидите, что он ссылается на другие файлы, вы можете увидеть строку, похожую на эту:

 <tileset firstgid="1" source="terrain.tsx"/>
  

Если terrain.tsx файл не может быть найден AssetManager , вы получаете сообщение об ошибке, которое вы видите.
Если вы откроете файл .tsx, в нем могут содержаться ссылки на файлы изображений, например, такие:

 <image source="terrain.png" width="396" height="198"/>
  

Этот файл изображения также должен быть доступен для AssetManager .

При использовании Tiled для создания файлов .tmx ссылки на ресурсы будут иметь относительные пути, вам необходимо убедиться, что они структурированы и правильно размещены в assets папке.

Комментарии:

1. Спасибо, чувак, оказывается, у меня не было level_1_better.tsx в той же папке, что и файл tmx. После того, как я добавил его туда, все получилось