我正在开发基于磁贴的游戏。但是,由于家具之类的东西我的地图有多层。我(暂时)创建了一个正方形来代表我的玩家。为了阻止我的玩家走在家具上,我需要制作一个检查图层的功能。我怎么做? (假设我需要检查我的播放器右边的磁贴上的图层) 伪代码的想法:
function checkLayers()
for every layer in map
if layer == "furniturelayer" then
stop player
end
end
end
编辑:我找到了一种可行的方法,但它不起作用。我有一个数组包含可碰撞的所有瓷砖的GID。然后我循环遍历所有图层并检查图块是否具有该GID。代码:
function gCheckGID(gMap, gLayer, tileX, tileY)
tilex = gMap.layers[gLayer]:get(tileX, tileY)
return tilex.id
end
function gCheckMovement(gMap, gArray, gTileX, gTileY)
local retVal = true
local layerArray = gMap.layers
local layers = table.getn(layerArray)
for layerCounter = 1, layers, 1 do
currGID = gCheckGID(gMap, layerArray[layerCounter], gTileX, gTileY)
for gidCounter = 1, table.getn(gArray), 1 do
if currGID == gArray[gidCounter] then
retVal = false
break
end
end
end
return retVal
end
然后我可以使用if语句来获取结果并确定是否移动我的角色。
答案 0 :(得分:3)
我假设您正在使用Tiled库"简单平铺实施"?如果是这样,我就是作者。我最近刚使用love.physics(Box2D)为STI添加了完全碰撞支持。如果要创建一个完全可碰撞的图层(例如sa家具图层),那么您需要做的就是在Tiled中为您的图层添加一个自定义属性,称为" collidable"并将值设置为" true"。
Tiled现在有一个碰撞编辑器,可用于将碰撞数据添加到tileset中的各个切片。 STI也支持开箱即用,无需自定义属性。
有关STI的更多信息,请查看LOVE论坛帖子here。