アットウィキロゴ

コールバック関数

コールバック関数とは、ある関数(親関数)に引数として渡され、その処理の途中や完了後に「呼び戻される(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