1

使用平铺我生成了一个包含表的Lua文件。因此,我想我应该编写一个for循环,循环遍历表,获取tile id并检查碰撞是否为真,如果为真,则添加碰撞。但是,我无法获取磁贴id或检查其属性。但它返回了一个错误,表示我试图索引零值tileData。

这是Map文件

返回{版本=“1.1”,luaversion=“5.1”,--更多杂项。数据平铺集={{name=“平铺集1”,firstgid=1,瓷砖宽度=16,tileheight=16,瓷砖={{id=0,属性={[“碰撞”]=false}},}}层={{type=“tilelayer”,name=“平铺层1”数据={--图块id的数组}}}}

这是我为在表格中循环而写的for循环

require(“键入”)localmap=love.filesystem.load(“Protyping.lua”)()局部tileset1=映射文件集本地tileData=tileset1.fileslocal colision_layer=map.layers[1]数据对于y=1,16 do对于x=1,16 do如果tileData[colision_layer[x*y]].properties[“colision”]==true,则世界:添加(“碰撞器”..x*y,x*map.tilewidth,y*tileheight,tilewidth,tileheght)结束结束结束
2
  • 如果tileData[colision_layer[x*y]].properties[“colision”]只接受真实的那么你就不需要==真。还要注意被视为任何值都被视为真实的. 评论 2017年2月1日8:48
  • 感谢您的建议,if语句每次运行时都会返回false。我认为这是因为我错误地引用了冲突。 评论 2017年2月1日13:53

2个答案2

重置为默认值
2

试试这个:

tileset1=地图.tilesets[1]

而不是

tileset1=映射文件集
1
  • 谢谢,代码运行了,我只需要修复for循环,这样它就可以将冲突放在正确的位置,但除此之外,如果有效的话。 评论 2017年2月1日3:43
1

lhf的答案(map.tilesets[1]而不是映射文件集)修复了您得到的错误,但要使代码正常工作,至少还需要修复其他两个问题。

第一个是一致的拼写:你有一个碰撞属性和绞痛签入代码。

第二件需要修复的事情是引用各个图块的方式。平铺的图层数据由二维平铺数据组成,从顶部开始,从左到右排列在一维数组中,因此索引编号如下所示:

平铺索引

你会认为你可以这么做x年来获取索引,但如果你仔细观察,你会发现这不起作用。相反,你必须这样做x+(y-1)*宽度.

或者,如果您使用基于零的x和y,它看起来像这样:

平铺索引基于0

就个人而言,我更喜欢基于0的x和y(但随着我对Lua的熟悉程度提高,这可能会改变,因为Lua有基于1的数组)。如果使用基于0的x和y,则公式为x+1+y*宽度.

今天早上我刚好写了一个教程,介绍了Tiled格式,并有一些帮助函数可以做到这一点(使用基于0的公式)。您可能会发现它很有帮助:https://github.com/prust/sti-pg示例.

本教程使用简单平铺实现,这是一个用于处理平铺lua文件的非常好的库。由于您正在尝试进行碰撞,我应该提到STI有一个用于凹凸碰撞库和box2d(物理)碰撞库的插件。

2

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.