2015-06-10 4 views
0

Я пытаюсь показать изометрическую разбитую карту с использованием LibGDX и Eclipse.LibGDX не смог разобрать файл tmx: файл не найден

Однако при выполнении проекта я столкнуться с этой ошибкой (ы):

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.SerializationException: Error parsing file: E:/Documenti/eclipseiso/desktop/map.tmx 
at com.badlogic.gdx.utils.XmlReader.parse(XmlReader.java:83) 
at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:78) 
at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:65) 
at com.mygdx.eclipseiso.screens.Play.show(Play.java:20) 
at com.badlogic.gdx.Game.setScreen(Game.java:61) 
at com.mygdx.eclipseiso.eclipseiso.create(eclipseiso.java:12) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120) 

Вызванный: com.badlogic.gdx.utils.GdxRuntimeException: Файл не найден: E: \ Documenti \ eclipseiso \ рабочий стол \ map.tmx (внутренний) at com.badlogic.gdx.files.FileHandle.read (FileHandle.java:136) at com.badlogic.gdx.files.FileHandle.reader (FileHandle.java:163) at com .badlogic.gdx.utils.XmlReader.parse (XmlReader.java:81) ... 7 еще

Код выглядит следующим образом:

map = new TmxMapLoader().load("maps/map.tmx"); 
renderer = new IsometricTiledMapRenderer(map); 

и файл с именем "map.tmx" находятся внутри активов/карт.

Таким образом, фактический путь:

assets/maps/map.tmx 

Карта является не сжимаются как XML, он сжат в Gzip.

Вот содержание map.tmx:

<?xml version="1.0" encoding="UTF-8"?> 
<map version="1.0" orientation="isometric" renderorder="right-down" width="5" height="5" tilewidth="100" tileheight="50" nextobjectid="1"> 
<tileset firstgid="1" name="joj" tilewidth="100" tileheight="350"> 
    <tile id="0"> 
    <image width="100" height="350" source="one.png"/> 
    </tile> 
    <tile id="1"> 
    <image width="100" height="350" source="two.png"/> 
    </tile> 
    <tile id="2"> 
    <image width="100" height="350" source="three.png"/> 
    </tile> 
</tileset> 
<layer name="Livello tile 1" width="5" height="5"> 
    <data encoding="base64" compression="zlib"> 
    eJxjZmBgYAZiRiTMjCTGBMXMaBibGC4MAAxQAEE= 
    </data> 
</layer> 
</map> 

Кроме того, я создал папку карты через Eclipse, щелкнув правой кнопкой мыши папку активов и добавив новый пакет с именем карты, то я переместил требуется файлы в папку карт, всегда через Eclipse.

Папка с картами не создавалась внутри активов (по крайней мере, графически), поэтому я переместил ее в папку с ресурсами, но независимо от того, что программа не будет работать.

ответ

0

Я получил его разобрали:

Первый выпуск - карта не найдена

Fix: поместить файлы внутри рабочего стола папку проекта, а не внутри активов.

Используя Gdx.files.internal("map.tmx").file().getAbsolutePath();, вы можете распечатать местоположение, которое вам нужно использовать.

Второй вопрос - GL30 ошибка

Exception in thread "LWJGL Application" java.lang.IllegalArgumentException: Error compiling shader: Vertex shader failed to compile with the following errors: ERROR: error(#272) Implicit version number 110 not supported by GL3 forward compatible context ERROR: error(#273) 1 compilation errors. No code generated

Fix: копировать шейдер по умолчанию и добавить #version 330 как первая строка должна быть написана. Шиндер по умолчанию можно найти по ошибке, напечатанной на консоли, и вы по умолчанию GDX использует очень старую версию.

Это как моя по умолчанию шейдер выглядит следующим образом:

static public ShaderProgram createDefaultShader() { String vertexShader = "#version 330 core\n" + "in vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" // + "in vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" // + "in vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" // + "uniform mat4 u_projTrans;\n" // + "out vec4 v_color;\n" // + "out vec2 v_texCoords;\n" // + "\n" // + "void main()\n" // + "{\n" // + " v_color = " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" // + " v_color.a = v_color.a * (255.0/254.0);\n" // + " v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" // + " gl_Position = u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" // + "}\n"; String fragmentShader = "#version 330 core\n" + "#ifdef GL_ES\n" // + "#define LOWP lowp\n" // + "precision mediump float;\n" // + "#else\n" // + "#define LOWP \n" // + "#endif\n" // + "in LOWP vec4 v_color;\n" // + "in vec2 v_texCoords;\n" // + "out vec4 fragColor;\n" // + "uniform sampler2D u_texture;\n" // + "void main()\n"// + "{\n" // + " fragColor = v_color * texture(u_texture, v_texCoords);\n" // + "}"; ShaderProgram shader = new ShaderProgram(vertexShader, fragmentShader); if (shader.isCompiled() == false) throw new IllegalArgumentException("Error compiling shader: " + shader.getLog()); return shader; }

Затем вам нужно кормить его Batch объект, который вы затем использовать для визуализации карты:

Batch = new SpriteBatch(1000, createDefaultShader()); // not required to be a spriteBatch IsometricTiledMapRenderer renderer= new IsometricTiledMapRenderer(map,spriteBatch);

Третий вопрос - черный/мигающий экран

Fix: убедитесь, что вы положили super.render(); внутри метода public void render()

В противном случае экран будет черным, и если вы отредактируете внутри метода show(), вы получите мигающий экран.

Надеюсь, это поможет кому-то!

+0

Мне всегда удавалось разместить все активы в папке Android/Assets, а затем обращаться к ним следующим образом: 'new Texture (" filename.jpg "). Просто убедитесь, что как только вы поместите активы в эту папку, вы Refresh All с помощью gradle. – bazola

+0

Я снял галочку с андроидной версией, поэтому папка с ресурсами находится внутри ядра, я не знаю, изменит ли это ее действие ... Кроме того, я пробовал работать над проектами, но ничего не изменилось. Не так много. :) – iv2b

0

Причина: «Файл не найден». Он ищет его в ...\desktop\map.tmx, но вы сказали, что он находится в assets/maps/map.tmx. Думаю, вам следует получить его как: map = new TmxMapLoader().load(Gdx.files.internal("maps/map.tmx")); Это должно быть сделано. Дайте мне знать, если он работал

+0

«Загрузка метода (String) в типе TmxMapLoader не применима для аргументов (FileHandle)« Я также попытался поместить необходимые файлы в папку рабочего стола, но ничего не изменил. * edit * Я изменил его на "Gdx.files.internal (" maps/map.tmx "). file(). getAbsolutePath();" и он возвращает «E: \ Documenti \ eclipseiso \ desktop \ map.tmx». – iv2b

+0

Получил это с помощью: 'Gdx.files.internal (" map.tmx "). File(). GetAbsolutePath();', однако теперь я получаю эту ошибку: «Исключение в потоке» Приложение LWJGL «java.lang.IllegalArgumentException : Ошибка компиляции шейдеров: шейдер Vertex не удалось скомпилировать со следующими ошибками: ERROR: ошибка (# 272) Неявный номер версии 110, не поддерживаемый перекрестно совместимым контекстом GL3 ОШИБКА: ошибка (# 273) 1 ошибка компиляции. Не генерируется код 'Это довольно странно, поскольку я никогда не касался каких-либо конфигураций GL3. – iv2b

+0

Ошибка возникает, когда я пытаюсь создать экземпляр IsometricTiledMapRenderer. В другом вопросе [link] (http://stackoverflow.com/questions/11737426/libgdx-application-crashes-when-call-tiledmaprenderer-render) проблема была указателем набора элементов, но я просто попытался загрузить карту из учебника, и он тоже не работает, плюс я использую отдельные изображения ... Это странно. – iv2b

Смежные вопросы