如何使用 Corona SDK、Tiled 和 Ceramic Tile Engine 创建碰撞地图?

我正在制作一个简单的平铺式游戏,其中包括:

  • 一个带有碰撞层的平铺地图(由 Tiled 制作,使用 Ceramic Tile Engine 加载)
  • 一个在地图内移动的角色

我想做的是:在平铺地图中移动角色,同时尊重平铺地图中的碰撞层。

这是代码:

-- 加载地图
local ceramic = require("Ceramic")
local map = ceramic.buildMap("maps/map.lua")

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

-- 创建按钮
btnLeft = display.newImage("images/btnLeft.png", 10, 10)
btnRight = display.newImage("images/btnRight.png", 150, 10)

-- 按钮事件监听器
btnLeft:addEventListener("tap", moveLeft)
btnRight:addEventListener("tap", moveRight)

-- 按钮函数
function moveLeft()
    hero.x = hero.x - 50
end

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

问题是,地图与角色是分开的。我怎样才能把角色“放入”地图中?我错过了什么吗?

注意:平铺地图是俯视角度。

注意:地图有 4 层:背景、World、Doors、Collision,我希望玩家不要走入 Collision 层的区域。

点赞
用户2868291
用户2868291

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

这意味着您可以选择...

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

注意:使用Ceramic时,使用Box2D更容易,但一旦Twilight Engine发布,非物理碰撞使用将变得更容易。

在这里,我只会给出Box2D的过程。这可以通过将单个瓷砖变成物理瓷砖或将整个图层的瓷砖物理化来简单地完成。可以通过编辑瓷砖属性并在其中添加physics:enabled = true来使单个瓷砖物理化。要查看有关物理的稍微详细的说明,您可以查看[此链接](https://github.com/superqix/Ceramic-Tile-Engine/wiki/Documentation#layer-properties)。它也适用于单个瓷砖。

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

2013-10-15 20:11:24