アットウィキロゴ

タイマー

Playdate の SDK におけるタイマー機能は、主に Lua API で強力なユーティリティ(CoreLibs)として提供されています。
一方、C API ではより低レイヤーな時間取得関数を組み合わせて自作する形が一般的です。


概要

1. Lua API におけるタイマー
Lua では、標準ライブラリの CoreLibs/timer をインポートすることで、時間ベースおよびフレームベースのタイマーが利用可能です。
主要な種類
  • playdate.timer (時間ベース): ミリ秒単位で動作します。実時間に基づいた処理に適しています
  • playdate.frameTimer(フレームベース): フレーム数単位で動作します。ゲームの更新サイクルに同期させたい処理に適しています
基本的な使い方
タイマーを機能させるには、メインの更新ループ内で更新関数を呼び出す必要があります。
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