Сначала я создаю функции, которые будут порождать и проверять столкновения:
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
Проверка столкновения работает только на последней вызванной платформе, может кто-нибудь объяснить, какую логику я здесь не вижу?Почему он игнорирует первую платформу?Это перегружено?