Z-Index
Z-Indexは
スプライトが画面に描画される「重なり順」を制御する非常に重要な要素です。
Playdateは
1-bit ディスプレイを採用しているため、重なり順を適切に管理しないと、キャラクターが背景に隠れてしまったり、UIが見えなくなったりします。
1. Z-Indexの基本ルール
Playdateのスプライトシステム(playdate.graphics.sprite)では、以下のルールで描画順が決まります。
- 数値が大きいほど手前に表示されます
- 数値が小さいほど奥(背景側)に表示されます
- デフォルトのZ-Indexは “0” です
- Z-Index の値が同じ場合はDisplay Listに add() した順番
Playdate の内部(C API)では、Z-Index は int16_t(16ビット符号付き整数)として定義されています。
そのため、取りうる値の範囲は -32,768 ~ 32,767 となります。
2. 基本的な操作メソッド
スプライトに対して以下のメソッドを使用して設定・取得を行います。
| メソッド |
説明 |
| sprite:setZIndex(z) |
スプライトのZ-Indexを指定した整数 z に設定します。 |
| sprite:getZIndex() |
スプライトの現在のZ-Indexを返します。 |
local mySprite = gfx.sprite.new(image)
mySprite:setZIndex(100) -- UIなど手前に出したいもの
mySprite:add()
3. 実践的な使い分け(レイヤー設計)
開発をスムーズにするために、あらかじめ用途ごとにZ-Indexの範囲を決めておくのが一般的です。
| Z-Indexの範囲 |
用途(例) |
| -100 以下 |
遠景・背景のタイルマップ |
| 0 |
一般的なオブジェクト、床 |
| 1 〜 999 |
プレイヤー、敵、動く障害物 |
| 1000 以上 |
固定UI、ポーズ画面、テキストボックス |
4. 応用:Yソート(擬似3D/見下ろし視点)
『ゼルダの伝説』のような見下ろし視点(トップダウン)のゲームでは、「キャラの足元(Y座標)が下にあるほど手前に表示する」という処理が必要です。これを「Yソート」と呼びます。
Playdateでは、毎フレーム update 内でY座標をZ-Indexに反映させることで簡単に実現できます。
function mySprite:update()
-- Y座標をそのままZ-Indexに設定することで、
-- 画面の下にいるキャラが自動的に手前にくる
self:setZIndex(self.y)
end
5. 注意点とTips
- sprite.update() の呼び出し
- Z-Indexを変更した後、実際に画面に反映されるのは playdate.graphics.sprite.update() が実行されたタイミングです。
- この関数が内部でZ-Indexに基づいた並び替え(ソート)を自動で行います。
- 描画パフォーマンス
- スプライトの数があまりに多く、かつ毎フレーム全員のZ-Indexを書き換えると負荷がかかる場合があります。
- 動きがない背景などは固定の値を使い、必要なものだけ動的に変更しましょう。
- 不透明度(パターン)との関係
- 1ビット画面なので「半透明」はありませんが、ディザリング(網点)を使ったスプライトを重ねる際、Z-Indexが正しくないと意図した見た目になりません。
- 重なり順は常に意識しておく必要があります。
関連ページ
最終更新:2026年04月22日 13:42