将一个XML文件转换为lua表格?

我有一个从Tiled生成的XML文件(格式:http://sourceforge.net/apps/mediawiki/tiled/index.php?title=TMX_Map_Format)

示例:

<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="isometric" width="100" height="100" tilewidth="64" tileheight="32">
 <tileset firstgid="1" name="grass_and_water_0" tilewidth="64" tileheight="64">
  <image source="tiles/grass_and_water_0.png" trans="ff00ff" width="64" height="64"/>
 </tileset>
 <layer name="Tile Layer 1" width="100" height="100">
  <data>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
   <tile gid="1"/>
  </data>
 </layer>
</map>

这是其中的一部分,实际文件超过10,000行。

由于性能原因,我试图将其从XML文件转换为Lua表,例如:

variables = [tilewidth=64,tileheight=64,width=100,height=100]

tileset = [1=[source="tiles/grass_and_water_0.png",width=64,height=64],....]

tile_map[][] = [[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1]]

其中1将替换为tile gid值。变量的其余数据(variables)需要添加到另一个表格中,我可以使用它。

我想要这样做的原因是使用本地Lua表格比XML解析和使用结果数据更快。

另外,我可以简单地使用带有for命令的“Drawing Isometric game worlds”(https://stackoverflow.com/questions/892811/drawing-isometric-game-worlds)来生成显示。

这还将使我能够为对象添加更多图层,例如

objects_map[][] = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,3,3,3,3,4,4,5,5,5,5,0,0],
[0,0,3,3,3,3,3,4,6,6,6,5,0,0],
[0,0,3,3,3,3,4,1,6,5,5,6,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0]]

然后我可以在一个绘图调用中显示两个数组,将0替换为tile_map和对象表格中的表格数据,以创建类似于

result_map[][] = [[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,3,3,3,3,4,4,5,5,5,5,1,1],
[1,1,3,3,3,3,3,4,6,6,6,5,1,1],
[1,1,3,3,3,3,4,1,6,5,5,6,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1]]

看起来很简单,我只需要弄清楚如何将XML转换为tilemap。

任何帮助都会很棒,或者指向我可以得到一些帮助的方向,我看了Lua用户,并没有真正找到任何可以帮助我的东西。

原文链接 https://stackoverflow.com/questions/5690909

点赞