スリープ(一時停止)

love.timer.sleep

追加バージョン0.2.1削除バージョン-

指定された秒数間、現在のスレッドのスリープ(一時停止)を行います。

local cnt = 0

function love.draw()
  love.graphics.print(tostring(cnt), 20, 20)
end

function love.update(dt)
    cnt = cnt + 1
end

function love.keypressed(key)
    love.timer.sleep(1)
end
スリープ(一時停止)

実行すると、増え続ける数値が表示されます。キーボードのキーを入力すると1秒間スリープ(一時停止)します。


sleepの動きの注意点

love.timer.sleepで指定した秒数間は描画処理は行われず、入力イベントもトリガーされません。以下のプログラムは、その挙動の確認用のプログラムです(※コンソール出力を使用します)。

cnt = 0
inputText = ""

function love.load()
  love.keyboard.setTextInput(true)
end

function love.draw()
  love.graphics.print(tostring(cnt), 20, 20)
  love.graphics.print(inputText, 20, 40)
end

function love.update(dt)
  cnt = cnt + 1
end

function love.mousepressed(x, y, button, istouch)
  love.timer.sleep(1)
end

function love.keypressed(key)
  print("call: keypressed")
end

function love.keyreleased(key)
  print("call: keyreleased")
end

function love.textinput(text)
  print("call: textinput")
  inputText = inputText .. text
end

このプログラムは以下の動作を行います。

  • keypressed, keyreleased, textinputが呼び出されるとコンソールに文字列を出力
  • textinputで変数inputTextを更新(入力したキーの結合)
  • mousepressedで1秒間のスリープ

スリープ中にキーボードのキーをいくつか入力してみてください。コンソールには何も出力されません。スリープ終了後にまとめて表示されます。また、スリープ中は入力した文字列の表示も更新されません。

このように、スリープ中は描画処理が行われない状態になります。メインスレッドで使用する場合は特に注意してください。