如何阻止玩家穿越一层?

时间:2014-09-22 07:20:17

标签: lua love2d tiled

我正在开发基于磁贴的游戏。但是,由于家具之类的东西我的地图有多层。我(暂时)创建了一个正方形来代表我的玩家。为了阻止我的玩家走在家具上,我需要制作一个检查图层的功能。我怎么做? (假设我需要检查我的播放器右边的磁贴上的图层) 伪代码的想法:

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语句来获取结果并确定是否移动我的角色。

1 个答案:

答案 0 :(得分:3)

我假设您正在使用Tiled库"简单平铺实施"?如果是这样,我就是作者。我最近刚使用love.physics(Box2D)为STI添加了完全碰撞支持。如果要创建一个完全可碰撞的图层(例如sa家具图层),那么您需要做的就是在Tiled中为您的图层添加一个自定义属性,称为" collidable"并将值设置为" true"。

Tiled现在有一个碰撞编辑器,可用于将碰撞数据添加到tileset中的各个切片。 STI也支持开箱即用,无需自定义属性。

有关STI的更多信息,请查看LOVE论坛帖子here