2012-05-08 4 views
1

Я новичок в 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 секунд, а затем отображает завершенный счет. Как сделать паузу между каждой итерацией? Я подозреваю, что проблема в том, что функция draw вызывается один раз, и поэтому она завершает всю свою работу перед отображением.

ответ

4

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, чтобы убедиться, что получаю целое число.

+0

Это правильный способ сделать это: обновить состояние изменений, рисовать показывает визуальные объекты в зависимости от этого состояния. – mlepage

Смежные вопросы