使用love2d和Lua。我的平台生成函数无法正常工作

首先,我创建了将生成和检查碰撞的函数:

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()函数(我知道这是个原始问题),检查碰撞并绘制平台:

--放置平台
makeFloor(750, 600, 300, 10)
makeFloor(20, 500, 700, 10)

--检测碰撞
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

碰撞检查只在最后一个调用的平台上起作用,有人能解释一下我没有看到的逻辑吗?它为什么忽略了第一个平台?它被覆盖了吗?

点赞
用户5675002
用户5675002

当你在 else 分支内为 .isGrounded.canJump 属性赋值为 false 时,会抹去之前的碰撞检测的结果。

不要在每次检测后都赋值为 false。相反,在进入循环之前初始化这些属性为 false,只有在发现碰撞后才赋值为 true

2018-09-21 10:07:43