Как остановить игрока от прохождения слоя?

Я работаю над игрой на основе тайлов. Однако из-за таких вещей, как мебель, моя карта имеет несколько слоев. Я (в настоящее время) создал квадрат, чтобы представлять моего игрока. Чтобы мой игрок не ходил по мебели, мне нужно сделать функцию, которая проверяет слой. Как я могу это сделать? (Предположим, мне нужно проверить слой на плитке справа от игрока). Идеи псевдокода:

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 ответ

Я предполагаю, что вы используете библиотеку Tiled "Простая реализация Tiled"? Если это так, я автор. Я только недавно добавил полную поддержку коллизий в STI, используя love.physics (Box2D). Если вы хотите создать слой, который является полностью сопоставимым (например, слой мебели), то все, что вам нужно сделать, это добавить пользовательское свойство для вашего слоя в Tiled под названием "collidable" и установить значение "true".

В Tiled теперь есть редактор коллизий, который можно использовать для добавления данных о коллизиях в отдельные плитки в наборе плиток. STI также поддерживает это из коробки без каких-либо специальных свойств.

Для получения дополнительной информации о STI, проверьте ветку форума LOVE здесь.

Другие вопросы по тегам