イメージテーブル
Playdateの開発において、
スプライトシートはイメージテーブル(imagetable)と呼ばれます。
これは単なる「画像の詰め合わせ」ではなく、SDKがファイル名から自動的にスライスし、
メモリ効率を最適化した状態で扱うための独自の仕組みです。
1. 規約による自動スライス(Naming Convention)
Playdate SDKの最も強力な特徴は、外部の定義ファイル(
JSONやXML)を必要とせず、ファイル名そのものをメタデータとして扱う点にあります。
- 命名ルール
[名前]-table-[横幅]-[縦幅].png
- 具体例
player-walk-table-32-32.png
- このファイルをプロジェクトに置くだけで、コンパイラ(pdc)は「32x32ピクセルのコマが並んだイメージテーブル」として認識し、独自の .pdt 形式に変換します。
2. 実装における基本操作
Lua APIでの基本的な扱いは非常にシンプルです。
local gfx = playdate.graphics
-- 1. 読み込み(サフィックスの "-table-..." 以下は省略可能)
local imageTable = gfx.imagetable.new("images/player-walk")
-- 2. 特定のフレームを描画 (Luaなのでインデックスは 1 から開始)
imageTable:drawImage(1, x, y)
-- 3. アニメーションへの応用
local loop = gfx.animation.loop.new(100, imageTable, true)
3. イメージテーブルの主な用途
イメージテーブルは、単なるキャラクタのアニメーション以外にも多用されます。
| 用途 |
内容 |
| Animation |
animation.loop などに渡し、パラパラ漫画のように再生する |
| Tilemap |
マップエディタで配置する「タイルセット」として利用する |
| Sprite Property |
gfx.sprite に持たせ、状態に応じて描画フレームを切り替える |
| Button States |
複数のボタン状態(通常、押下、無効)を1枚にまとめる |
4. テクニカル・ディテール
- 1-bit の制約と透明度
- Playdateは白黒の1-bit ディスプレイです。
- PNG自体は8-bitや24-bitでも読み込めますが、コンパイル時に1-bitに変換されます。
- 透明度: 1-bitの透過(完全に透明か、完全に不透明か)がサポートされています
- ディザリング: グレースケール画像はコンパイル時にディザリング処理されます
- メモリとインデックス
- インデックス順: 画像の左上から右へ、端まで行ったら下の行の左端へ、という順番で 1, 2, 3... と番号が振られます
- 最適化: imagetable は内部的に同一サイズの image オブジェクトの配列として管理されており、ランダムアクセスが非常に高速です
5. 開発時の Tips
- -table-表記の省略
- コード内で imagetable.new("images/hero-table-16-16") と書く必要はありません。
- table- 以降を省略した imagetable.new("images/hero") で読み込めます。これにより、後からスプライトのサイズを変更してもコードを修正せずに済みます。
- Luaの "1" 始まり問題
- 他のエンジン(C系やPython)から移行する場合、最初のコマが "0" ではなく "1" であることに注意してください。
- ループ処理を書く際にオフセットでバグを出しやすいポイントです。
- コンパイラによる画像のコンバート
- Playdateの pdc コンパイラは、ビルド時にこれらの画像を実機に最適な独自のバイナリ形式へとパッキングします。
- そのため、開発者はアセット管理の煩わしさから解放され、ファイル名の命名規則さえ守れば即座にスプライトを動かせるのがこのシステムの大きな利点です。
関連ページ
最終更新:2026年04月30日 07:56