D-Pad (十字ボタン)
D-Pad (Directional Pad) とは、十字ボタンのことで、本体左側に配置されたクリック感のある小型の4方向ボタン。
概要
PlaydateのD-Pad(十字ボタン)は、レトロゲーム機と同様の標準的な4方向入力インターフェースですが、SDKレベルでは非常に使いやすく設計されています。
D-Padは、Playdateにおいて「最も信頼できる入力」です。
クランクという飛び道具があるからこそ、移動や選択といった基本操作をD-Padで堅実に実装することで、ゲームとしての手触りが安定します。
1. 基本仕様
- 4方向入力
- 上 (Up)、下 (Down)、左 (Left)、右 (Right) の4つの物理スイッチで構成されています。
- 同時押し
- 「右と上」のように、隣接する2方向を同時に押すことで斜め入力を検知できます。
- 物理的質感
- クリック感のあるタクタイルスイッチが採用されており、非常に正確なレスポンスを返します。
2. 入力検知の3つの状態 (API)
Playdate SDKでは、playdate.update() 内で以下の3つの状態を使い分けるのが基本です。
| 関数 |
挙動 |
主な用途 |
| buttonIsPressed(c) |
押されている間ずっと true |
キャラクターの移動 |
| buttonJustPressed(c) |
押された瞬間だけ1回 true |
メニューの選択、ジャンプ、攻撃 |
| buttonJustReleased(c) |
離された瞬間だけ1回 true |
チャージ攻撃の放出、メニューを閉じる |
- 使用する定数
- playdate.kButtonUp
- playdate.kButtonDown
- playdate.kButtonLeft
- playdate.kButtonRight
3. 実装例:シンプルな移動ロジック
スプライトを十字キーで上下左右に動かす最も一般的な書き方です。
function playdate.update()
if playdate.buttonIsPressed(playdate.kButtonUp) then
mySprite:moveBy(0, -2)
elseif playdate.buttonIsPressed(playdate.kButtonDown) then
mySprite:moveBy(0, 2)
end
if playdate.buttonIsPressed(playdate.kButtonLeft) then
mySprite:moveBy(-2, 0)
elseif playdate.buttonIsPressed(playdate.kButtonRight) then
mySprite:moveBy(2, 0)
end
-- スプライトの描画更新
playdate.graphics.sprite.update()
end
4. 斜め入力の扱い
PlaydateのD-Padは物理的に独立した4つのボタン(またはそれに準ずる機構)として判定されるため、斜め方向専用の定数(kButtonUpRightなど)はありません。
斜めを判定したい場合は「Up と Right が両方 Pressed かどうか」をチェックします。
- 正規化の注意
- 上記の「移動ロジック」のように単純に X と Y を加算すると、斜め移動の際に移動速度が \sqrt{2} 倍(約1.4倍)速くなってしまいます。厳密なアクションゲームを作る場合は、斜め入力時に速度を調整する計算が必要です。
5. デザイン上のベストプラクティス
- クランクとの共存
- クランク操作がメインのゲームでも、補助的にD-Padでメニュー操作や微調整ができるようにすると親切です。
- 逆に、D-Padメインのゲームで「クランクを回すと高速スクロール」といった機能を付けると、Playdateらしさが増します。
- アクセシビリティ
- 片手で操作できるように(左手のD-Padを使わずに、右手のA/Bボタンやクランクだけで遊べるように)設計する開発者も多いです。
関連ページ
最終更新:2026年04月20日 23:26