0

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

  • 带有碰撞层的平铺贴图(由 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 层:背景、世界、门、碰撞,我希望玩家不要走进碰撞层的区域。

4

1 回答 1

1

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

这意味着您可以...

  1. 创建一个非物理碰撞系统,检查附近的“可碰撞”瓷砖
  2. 在您的地图中实现 Corona 的 Box2D 物理。

Nota Bene:使用 Ceramic 时,使用 Box2D 会更容易,但是一旦 Twilight Engine 出现,非物理碰撞应该会更容易使用。

这里我只给出 Box2D 的过程。通过使单个切片物理化或使整个层的切片物理化很简单。通过编辑平铺属性并在其中添加物理:启用 = true 可以使单个平铺成为物理平铺。要查看有关物理学的更深入的解释,您可以查看此链接。它也适用于单个瓷砖。

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

于 2013-10-15T20:11:24.587 回答