コールバック関数
コールバック関数とは、ある関数(親関数)に引数として渡され、その処理の途中や完了後に「呼び戻される(call back)」関数のことです。処理の順番を制御したり、特定のイベント発生時や非同期処理(通信やタイマーなど)の終了後に実行したい処理を記述するために不可欠な手法です。
概要
Playdateの開発(主にLua SDK)において、コールバック関数はゲームの挙動を制御するための最も重要な仕組みです。
システムから特定のタイミングで「呼び出される」関数を定義することで、描画や入力、イベント処理を効率的に行います。
1. 最重要:playdate.update()
この関数はシステムによって毎秒30回(デフォルト)自動的に呼び出されます。
- 役割
- 画面の更新、ゲームロジックの進行。
- 特徴
- この関数を定義しないと、画面には何も表示されず、プログラムが停止しているように見えます。
function playdate.update()
-- 1. 計算(移動など)
-- 2. 描画(スプライトの描画など)
gfx.sprite.update()
end
2. 入力系コールバック
ボタン操作や
クランクの動きに反応するためのコールバックです。
- ボタン入力
- playdate.AButtonDown のように、特定の操作に対して一度だけ実行したい処理に向いています。
- AButtonDown / AButtonUp: Aボタンを押した/離した瞬間
- BButtonDown / BButtonUp: Bボタンを押した/離した瞬間
- downButtonDown / upButtonDown...| 十字キーの各方向
- クランク入力
- クランク(手回しハンドル)の動きを検知します。
- playdate.cranked(change, acceleratedChange): クランクが回された時に呼ばれます。changeには回転角度が入ります
- playdate.crankDocked / crankUndocked: クランクが収納された/引き出された瞬間
3. システムイベント・コールバック
ゲームの状態が変わる際に呼ばれる重要な関数です。
| 関数名 |
タイミング |
| playdate.gameWillPause |
ユーザーがMenuボタンを押してポーズする直前 |
| playdate.gameWillResume |
ポーズメニューからゲームに戻った直前 |
| playdate.deviceWillSleep |
一定時間操作がなく、スリープに入る時 |
| playdate.deviceWillLock |
ロックボタンが押された時 |
- TIP
- playdate.gameWillPause 内には、ポーズ画面用のカスタムメニュー項目を追加する処理をよく記述します。
4. API固有のコールバック
- タイマー (playdate.timer)
- 指定した時間が経過した後に実行されます。
playdate.timer.new(1000, function()
print("1秒経過しました!")
end)
- スプライトの衝突
- スプライト同士がぶつかった際の挙動を collisionResponse コールバックで制御できます。
5. コールバック vs ポーリング
Playdateでは、入力をチェックする方法が2種類あります。
:1. コールバック{
「ボタンが押された瞬間」に通知が来る(イベント駆動)。
- 2. ポーリング (playdate.buttonIsPressed)
- update 内で常に「今押されているか」を確認する。
- 用途: キャラクターの移動(押し続けている間ずっと動く)など。
まとめ:イベントフローのイメージ
Playdateのプログラムは、まず初期化を行い、その後はシステムが playdate.update() を叩き続けながら、割り込み的に「ボタンが押された」「クランクが回った」などのコールバックを処理していくという流れになります。
まずは playdate.update と playdate.AButtonDown あたりから使い始めてみるのがスムーズです。
関連ページ
最終更新:2026年04月28日 22:02