アットウィキロゴ

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