Java LibGDX无法分析tmx文件:找不到文件

Java LibGDX无法分析tmx文件:找不到文件,java,eclipse,libgdx,Java,Eclipse,Libgdx,我正在尝试使用LibGDX和Eclipse显示等距平铺贴图 但是,在运行项目时,我遇到以下错误: 原因:com.badlogic.gdx.utils.GdxRuntimeException:未找到文件:E:\Documenti\eclipseiso\desktop\map.tmx(内部) 位于com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136) 位于com.badlogic.gdx.files.FileHandle.reader(

我正在尝试使用LibGDX和Eclipse显示等距平铺贴图

但是,在运行项目时,我遇到以下错误:

原因:com.badlogic.gdx.utils.GdxRuntimeException:未找到文件:E:\Documenti\eclipseiso\desktop\map.tmx(内部) 位于com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136) 位于com.badlogic.gdx.files.FileHandle.reader(FileHandle.java:163) 位于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中

因此,实际路径是:

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>

EJXZMBGYAZIRITMJCTGBMBMABGC4MAAXQAEE=
此外,我还通过Eclipse创建了maps文件夹,方法是右键单击assets文件夹并添加一个名为maps的新包,然后始终通过Eclipse将所需文件移动到maps文件夹中

“地图”文件夹不是在“资源”中生成的(至少是图形化的),因此我将其移动到“资源”文件夹中,但不管程序是否会运行。

原因显然是“找不到文件”。 它在
…\desktop\map.tmx
中查找,但您说它位于
资产/maps/map.tmx
中,我认为您应该像这样访问它:
map=newtmxmaploader().load(Gdx.files.internal(“maps/map.tmx”)

应该这样做。让我知道它是否有效

我已经解决了:

第一个问题-找不到地图

修复:将文件放在项目的桌面文件夹中,而不是放在资源中

使用
Gdx.files.internal(“map.tmx”).file().getAbsolutePath()您可以打印需要使用的位置

第二个问题-GL30错误

线程“LWJGL应用程序”java.lang.IllegalArgumentException中的异常:编译着色器时出错:顶点着色器未能编译,出现以下错误:错误:错误(#272)GL3前向兼容上下文不支持隐式版本号110错误:错误(#273)1编译错误。没有生成代码

修复:复制默认着色器并添加
#version 330
作为要写入的第一个字符串。默认着色器可以通过控制台中打印的错误找到,默认情况下,您将使用非常旧的版本

这是我的默认着色器的外观:

静态公共着色器程序createDefaultShader(){
字符串vertexShader=“#版本330核心\n”
+“在vec4中”+着色器程序.POSITION_属性+”;\n”//
+“在vec4中”+ShaderProgram.COLOR_属性+”;\n”//
+“在vec2中”+ShaderProgram.TEXCOORD_属性+0;\n”//
+“统一mat4 u_项目传输;\n”//
+“输出vec4 v_颜色;\n”//
+“输出vec2 v_texCoords;\n”//
+“\n”//
+“void main()\n”//
+“{\n”//
+“v_color=“+ShaderProgram.color_属性+”;\n”//
+“v_color.a=v_color.a*(255.0/254.0);\n”//
+“v_texCoords=“+ShaderProgram.TEXCOORD_属性+”0;\n”//
+“gl_Position=u_projTrans*”+ShaderProgram.Position_属性+”;\n”//
+“}\n”;
String fragmentShader=“#版本330核心\n”
+“#ifdef GL#ES\n”//
+“#定义LOWP LOWP\n”//
+“精度中间泵浮动;\n”//
+“#其他\n”//
+“#定义低位\n”//
+“#endif\n”//
+“在LOWP vec4 v_颜色中;\n”//
+“在vec2 v_texCoords中;\n”//
+“out vec4 fragColor;\n”//
+“均匀采样2D u_纹理;\n”//
+“void main()\n”//
+“{\n”//
+fragColor=v_颜色*纹理(u_纹理,v_纹理坐标);\n//
+ "}";
ShaderProgram shader=新的ShaderProgram(顶点着色器、碎片着色器);
如果(shader.isCompiled()==false)抛出新的IllegalArgumentException(“编译着色器时出错:+shader.getLog());
返回着色器;
}

然后需要将其馈送到批处理对象,然后使用该批处理对象渲染贴图:

Batch=newspritebatch(1000,createDefaultShader());//不需要是spriteBatch
IsometricTiledMapRenderer渲染器=新的IsometricTiledMapRenderer(贴图,spriteBatch)

第三期-黑色/闪烁屏幕

修正:确保你已经放置了
super.render()方法内部
公共void render()

否则,屏幕将是黑色的,如果在
show()
方法中进行渲染,将获得一个闪烁的屏幕


希望这有助于某人

“TmxMapLoader类型中的方法load(String)不适用于参数(FileHandle)”“我还尝试将所需文件放入桌面文件夹中,但没有任何更改。编辑我已将其更改为“Gdx.files.internal(“maps/map.tmx”).file().getAbsolutePath();”并返回“E:\Documenti\eclipseiso\desktop\map.tmx”。使其能够使用:
Gdx.files.internal(“map.tmx”).file().getAbsolutePath(),但是现在我得到了这个错误:
线程“LWJGL应用程序”java.lang.IllegalArgumentException中的异常:编译着色器时出错:顶点着色器未能编译,出现以下错误:错误:错误(#272)GL3正向兼容上下文不支持隐式版本号110错误:错误(#273)1编译错误。没有生成代码
,这很奇怪,因为我从未接触过任何GL3配置。错误是在我尝试实例化IsometricTiledMapRenderer时引起的。在另一个问题中,问题是tileset的索引,但是我只是尝试使用从教程下载的地图,但它也不起作用,而且我很担心
<?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>