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