将XML文件转换为lua表?

时间:2011-04-17 01:42:16

标签: 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值。剩下的数据(变量需要添加到另一个表中,我可以使用)

我想要这样做的原因是因为使用本机Lua表比XML解析更快,然后使用结果数据。

额外的垃圾漫游:

然后我可以简单地使用Drawing Isometric game worlds处的for命令来生成显示。

它还允许我为ontop上的对象生成更多图层,例如

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]]

然后我可以在一个绘图调用中显示它,将两个数组组合在一起,并用tile_map和objects表中的表数据替换0,以创建类似

的内容
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用户并没有找到任何可以帮助我的东西。

1 个答案:

答案 0 :(得分:2)

我建议LuaExpat。我在生产代码中使用它并且效果很好。您只需编写一些回调函数,这些函数会在遇到输入XML结构的各个部分时生成所需的Lua表。应该很快。