タイマー
Playdate の SDK におけるタイマー機能は、主に
Lua API で強力なユーティリティ(
CoreLibs)として提供されています。
一方、C API ではより低レイヤーな時間取得関数を組み合わせて自作する形が一般的です。
概要
1. Lua API におけるタイマー
Lua では、標準ライブラリの CoreLibs/timer をインポートすることで、時間ベースおよびフレームベースのタイマーが利用可能です。
- 主要な種類
- 基本的な使い方
- タイマーを機能させるには、メインの更新ループ内で更新関数を呼び出す必要があります。
import "CoreLibs/timer"
function playdate.update()
-- これを呼び出さないとタイマーが進行しません
playdate.timer.updateTimers()
-- スプライトなどの描画処理...
end
- タイマーの作成
-- 1000ミリ秒後に callback を実行するタイマー
local myTimer = playdate.timer.new(1000, function()
print("Time is up!")
end)
-- 引数を渡す場合
local t = playdate.timer.new(500, myCallback, arg1, arg2)
2. 高度な機能 (イージングと値の補間)
Playdate のタイマーは単なるカウントダウンだけでなく、値の補間(Tweening)にも使われます。
- 値の補間
- playdate.timer.new(duration, startValue, endValue, easingFunction) の形式で作成すると、指定したイージングに従って timer.value が変化します。
- イージング
- playdate.easingFunctions.outCubic などの標準的なイージング関数を指定可能です。
- 繰り返し
- timer.repeats = true に設定するとループします。
3. C API におけるタイマー
C API には Lua のような高機能なタイマーライブラリは標準搭載されていません。システム関数を使用して、経過時間を自身で管理する必要があります。
- playdate->system->getCurrentTimeMilliseconds()
- 現在のシステム時間をミリ秒で取得します。
- playdate->system->getElapsedTime()
- 前回の呼び出し、またはリセットからの経過時間を秒(float)で取得します。
これらを利用して、update 関数内で「目標時間」に達したかを判定するロジックを実装するのが一般的です。
4. よくある落とし穴と注意点
- update の呼び忘れ
- playdate.timer.updateTimers() を呼び忘れると、タイマーの更新やコールバックは実行されません。
- 多重生成
- update 関数内で条件なしに timer.new を呼ぶと、毎フレーム新しいタイマーが生成されてしまいます。フラグ管理や performAfterDelay の適切な利用が必要です。
- 削除の管理
- 不要になったタイマーは timer:remove() で明示的に削除するか、変数を nil にしてガベージコレクションの対象にする必要があります。
便利なメソッド一覧
| メソッド / プロパティ |
内容 |
| timer:pause() / resume() |
タイマーの一時停止と再開 |
| timer:reset() |
タイマーを初期状態に戻す |
| timer.timeLeft |
残り時間の取得 |
| timer.value |
イージング適用中の現在の値 |
| playdate.timer.performAfterDelay(ms, callback) |
簡易的な遅延実行 |
関連ページ
最終更新:2026年04月28日 10:37