1

私は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秒間ハングし、完了したカウントが表示されます。各反復の間に一時停止させるにはどうすればよいですか?問題は、描画関数が1回呼び出されることであると思われるため、表示する前にすべての作業を完了します。

4

1 に答える 1

4

love.draw()は 1 秒間に何度も呼び出されるため、アプリケーション全体がハングアップするため、実際にはスリープしないでください。

代わりに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-08T20:17:40.440 に答える