【问题标题】:Using love2d and Lua. My platform spawn function doesn't work使用 love2d 和 Lua。我的平台生成功能不起作用
【发布时间】:2019-02-25 17:11:21
【问题描述】:

首先,我创建将产生并检查碰撞的函数:

floors = {}

function makeFloor(x, y, w, h)
    floor = {}
    floor.x = x
    floor.y = y
    floor.w = w
    floor.h = h

    table.insert(floors, floor)
end

function checkCollision(x1,y1,w1,h1,x2,y2,w2,h2)
    return  x1 < x2+w2 and 
            x2 < x1+w1 and
            y1 < y2+h2 and
            y2 < y1+h1
end

然后我为每个我想生成的平台调用 makeFloor() 函数(我知道它的原语),检查碰撞并绘制平台:

-- place platforms
makeFloor(750, 600, 300, 10)
makeFloor(20, 500, 700, 10)


--check collision
for i, f in ipairs(floors) do
    if checkCollision(player.x,player.y,player.w,player.h,f.x,f.y,f.w,f.h) then
        player.isGrounded = true
        player.canJump = true
    else player.isGrounded = false
        player.canJump = false
    end
end

end

function gameDraw()

    for i, f in ipairs(floors) do
        love.graphics.rectangle("fill", f.x, f.y, f.w, f.h)
    end
end

碰撞检查仅适用于最后调用的平台,有人可以解释一下我在这里没有看到什么逻辑吗?为什么它忽略了第一个平台?是不是被超载了?

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    当您在碰撞检查的 else 子句中将 false 分配给 .isGrounded.canJump 字段时,您将擦除先前碰撞检查的结果。

    不要在每次检查后分配 false。而是在进入循环之前将这些字段初始化为 false,并且仅在发现冲突时才分配 true。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多