【发布时间】: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
碰撞检查仅适用于最后调用的平台,有人可以解释一下我在这里没有看到什么逻辑吗?为什么它忽略了第一个平台?是不是被超载了?
【问题讨论】: