简单计数,稍有延迟[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函数只被调用一次,所以它在显示之前完成了所有工作。

原文链接 https://stackoverflow.com/questions/10505060

点赞
stackoverflow用户111886
stackoverflow用户111886

love.draw()会被调用很多次,因此你不应该使用sleep,因为会导致整个应用程序挂起。

相反,应该使用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确保获得整数。

2012-05-08 20:17:40