使用love2d和Lua。我的平台生成功能不起作用

时间:2018-09-21 10:00:47

标签: lua love2d

首先,我创建将生成并检查冲突的函数:

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

冲突检查仅在最后一个平台上有效,有人可以解释一下我在这里看不到的逻辑吗?为什么它忽略第一个平台?它被覆盖吗?

1 个答案:

答案 0 :(得分:0)

在冲突检查的.isGrounded子句中为.canJumpelse字段分配false时,您要擦除以前的冲突检查的结果。

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