Corona SDK + Tiled + Ceramic Tile Engine:创建碰撞图?

时间:2013-10-14 02:41:55

标签: lua corona ceramic-tile-engine

我正在制作一个简单的基于平铺的游戏,其中包含:

  • 带有碰撞图层的瓷砖地图(由Tiled制作,加载Ceramic Tile Engine
  • 在地图内移动的角色

我想做什么:在瓷砖地图中移动角色,尊重瓷砖地图中的碰撞图层。

以下是代码:

-- 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 个答案:

答案 0 :(得分:1)

为了让玩家发生碰撞,你需要实现某种类型的碰撞检测 - 无论是否有物理。

这意味着你可以......

  1. 创建一个非物理碰撞系统,检查附近的“可碰撞”瓷砖
  2. 在地图中实施Corona的Box2D物理。
  3. Nota Bene:使用Ceramic时,使用Box2D更容易,但一旦Twilight Engine问世,非物理碰撞应该更容易使用。

    这里我只给出Box2D的程序。通过将单个瓷砖物理化或使整个图层的瓷砖物理化,可以非常简单地完成。单个图块可以通过编辑图块属性并在其中添加physics:enabled = true来实现。要查看有关物理的更深入的解释,您可以查看this link。它也适用于单个瓷砖。

    您可以通过将该属性添加到图层的属性列表来使整个图层物理化;要更改单个图块的物理主体,请编辑特定于图块的属性。