Используя love2d и Lua.Моя функция вызова платформы не работает - PullRequest
0 голосов
/ 21 сентября 2018

Сначала я создаю функции, которые будут порождать и проверять столкновения:

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 голосов
/ 21 сентября 2018

Вы стираете результаты предыдущих проверок коллизий, когда вы присваиваете ложь полям .isGrounded и .canJump в предложении else проверки коллизий.

Не присваивайте ложь после каждой проверки.Вместо этого инициализируйте эти поля как ложные перед входом в цикл, и присвойте true только при обнаружении столкновения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...