将XML文件转换为Lua表?

3

我有一个由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替换为瓷砖gid值,其余数据(变量)需要添加到另一个表中以供使用。

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

额外的废话:

然后我可以简单地使用for命令在绘制等角游戏世界来生成显示。

这也将允许我为上面的对象生成更多的图层,例如。

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个回答

2
我建议使用LuaExpat。我在生产代码中使用过它,效果非常好。你只需要编写一些回调函数,在遇到输入XML结构的各个部分时生成所需的Lua表。应该很容易实现。

你好,我有一个关于luaexpat的类似问题,既然你知道如何使用它,能否请你帮我解决一下我的问题? - Shepherdjo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接