Простой счет с небольшой задержкой [lua, LÖVE]

Я новичок в lua и LÖVE.

Я пытаюсь сделать простой подсчет чисел с небольшой задержкой, чтобы пользователь мог видеть, как происходит подсчет (вместо того, чтобы код просто подсчитывал, а затем отображал готовый подсчет)

У меня есть следующий код:

function love.draw()
    love.graphics.print("Welcome again to a simple counting sheep excercise.", 50, 50)

    i = 20
    ypos = 70

    while i > 0 do

        love.graphics.print("Number: " .. i .. ".", 50, ypos)
        love.timer.sleep(1)
        i = i - 1
        ypos = ypos + 12


    end

end

Но когда я запускаю его, он просто зависает на ~ 20 секунд, а затем отображает завершенный счет. Как сделать короткую паузу между каждой итерацией? Я подозреваю, что проблема в том, что функция рисования вызывается один раз, и поэтому она завершает всю свою работу перед отображением.


person jeremy    schedule 08.05.2012    source источник


Ответы (1)


love.draw() вызывается много раз в секунду, поэтому вам не следует спать, потому что это приводит к зависанию всего приложения.

Вместо этого используйте love.update() для обновления состояния приложения на основе текущего времени (или на основе дельты времени).

Например, я бы выразил то, что вы пытаетесь сделать, следующим образом:

function love.load()
   initTime = love.timer.getTime()
   displayString = true
end

function love.draw()
    love.graphics.print("Welcome again to a simple counting sheep excercise.", 50, 50)
    if displayString then
        love.graphics.print("Number: " .. currentNumber .. ".", 50, currentYpos)
    end
end

function love.update()
    local currentTime = love.timer.getTime()
    local timeDelta = math.floor(currentTime - initTime)
    currentNumber = 20 - timeDelta
    currentYpos = 70 + 12 * timeDelta
    if currentNumber < 0 then
        displayString = false
    end
end

Сначала я нахожу начальное время, а затем вычисляю число и позицию на основе разницы во времени с начальным временем. Разница в секундах, поэтому я вызываю math.floor, чтобы убедиться, что получаю целое число.

person Omri Barel    schedule 08.05.2012
comment
Это правильный способ сделать это: обновление изменяет состояние, рисование показывает визуальные вещи в зависимости от этого состояния. - person mlepage; 17.03.2014