2012-05-08 6 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秒間ハングしてから完了したカウントが表示されます。どのように各繰り返しの間に一時的に休止させるのですか?私は、描画関数が一度呼び出されるという問題があると思うので、表示する前にすべての作業を完了します。

答えて

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に電話して整数を取得するようにしています。

+0

これは正しい方法です。更新の状態を変更すると、その状態に応じて描画することができます。 – mlepage

関連する問題