アットウィキロゴ

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