Corona SDK + Tiled + Ceramic Tile Engine: создать карту столкновений?

Я делаю простую мозаичную игру с:

  • Карта плиток со слоем столкновений (сделана Tiled, загружена с помощью Ceramic Tile Engine)
  • персонаж, движущийся внутри карты

Что я хочу сделать: перемещать персонажа в Tile Map, с учетом слоя столкновения в Tile Map.

Вот код:

-- Load Map
local ceramic = require("Ceramic")
local map = ceramic.buildMap("maps/map.lua")


-- Create Character
hero = display.newImage("images/man.png")
hero.x = 0
hero.y = 0
map.layer['World']:insert(hero)

-- Create buttons
btnLeft = display.newImage("images/btnLeft.png", 10, 10)
btnRight = display.newImage("images/btnRight.png", 150, 10)

-- Button Event Listeners
btnLeft:addEventListener("tap", moveLeft)
btnRight:addEventListener("tap", moveRight)

-- Button functions
function moveLeft()
    hero.x = hero.x - 50
end

function moveRight()
    hero.x = hero.x + 50
end

Проблема в том, что карта отдельно от персонажа. Как я могу поместить персонажа "в" карту? Что я упустил?

Примечание. Карта тайлов имеет угол сверху вниз.

Примечание. Карта имеет 4 слоя: Фон, Мир, Двери, Столкновение, и я хочу, чтобы игрок НЕ проходил в области слоя Столкновения.

1 ответ

Решение

Для того, чтобы игрок столкнулся, вам нужно реализовать какой-либо тип обнаружения столкновений - будь то с физикой или без нее.

Что означает, что вы можете либо...

  1. Создайте нефизическую систему столкновений с проверкой ближайших "встречных" тайлов
  2. Реализуйте физику Corona Box2D на своей карте.

Примечание: при использовании Ceramic проще использовать Box2D, но как только выйдет Twilight Engine, нефизические столкновения станут проще в использовании.

Здесь я приведу только процедуру для Box2D. Это делается довольно просто, делая физические плитки единичными или физическими. Отдельные плитки можно сделать физическими, отредактировав свойства плиток и добавив в них физику: enabled = true. Чтобы увидеть чуть более подробное объяснение по физике, вы можете проверить эту ссылку. Это также относится к отдельным плиткам.

Вы можете сделать все слои физическими, добавив это свойство в список свойств вашего слоя; чтобы изменить физическое тело отдельных плиток, отредактируйте их свойства.

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