【问题标题】:Corona SDK + Tiled + Ceramic Tile Engine : Create Collision Map?Corona SDK + Tiled + Ceramic Tile Engine:创建碰撞贴图?
【发布时间】:2013-10-16 04:11:24
【问题描述】:

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

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

【问题讨论】:

    标签: lua coronasdk ceramic-tile-engine


    【解决方案1】:

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

    这意味着你可以...

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

    注意事项:使用 Ceramic 时,使用 Box2D 会更容易,但一旦 Twilight Engine 出现,非物理碰撞应该会更容易使用。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 2016-03-16
      相关资源
      最近更新 更多