簡體   English   中英

LibGDX無法解析tmx文件:找不到文件

[英]LibGDX could not parse tmx file: file not found

我正在嘗試使用LibGDX和Eclipse顯示等距的平鋪地圖。

但是,在運行項目時,我遇到此錯誤:

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:找不到文件:com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136中的E:\\ Documenti \\ eclipseiso \\ desktop \\ map.tmx(內部) )com.badlogic.gdx.utils.XmlReader.parse(XmlReader.java:81)處的com.badlogic.gdx.files.FileHandle.reader(FileHandle.java:163)...另外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創建了maps文件夾,方法是右鍵單擊assets文件夾並添加一個名為maps的新程序包,然后我總是通過Eclipse將所需的文件移到maps文件夾中。

maps文件夾不是在資產內部生成的(至少是通過圖形方式生成的),因此我將其移動到了Assets文件夾內部,但是無論該程序無法運行。

原因很明顯是“找不到文件”。 它在...\\desktop\\map.tmx尋找它,但是您說它位於assets/maps/map.tmx我認為您應該像這樣訪問它: map = new TmxMapLoader().load(Gdx.files.internal("maps/map.tmx")); 那應該做。 讓我知道是否有效

我已經整理好了:

第一期-找不到地圖

修復:將文件放在項目的桌面文件夾中,而不是資產中。

使用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

修復:復制默認着色器,並添加#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);

第三期-黑/閃爍的屏幕

修復:確保已放入super.render(); 在方法內部public void render ()

否則,屏幕將為黑色,並且如果在show()方法中進行渲染,則將獲得一個閃爍的屏幕。

希望這對某人有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM