ツクールのピクチャ番号の扱いについて

概要

ツクールのピクチャ番号の扱いについて解説します。
デフォルトではMVはピクチャは1から100まで使用できますが、マップと戦闘では同じピクチャ番号で別の画像を表示できます。
マップでピクチャを表示していても、戦闘が始まったら消えますし、戦闘が終われば戦闘で使ったピクチャはマップに持ち越しません。
このあたりについて、内部的にどうなっているかを解説したいと思います。

ピクチャと実際の表示の関係

まず2つの要素を抑えておく必要があります。

Sprite・・・実際に画面に表示する画像
ピクチャ・・・画像ファイル名、座標、拡大率などの情報をまとめたデータ(内部的には$gamePicture)

Spriteはマップ、戦闘表示時にピクチャ番号分、生成され、ピクチャの情報を使って画面に画像を表示します。
ピクチャはセーブに含まれるので、ロードしても画像を復元できるようになっています。
プラグイン制作でよくあるケースなのですが、画面に表示しているSpriteをいじるだけだとセーブ・ロードでその内容が消えてしまいます。

マップと戦闘のピクチャ番号について

戦闘時に使われるピクチャ番号は内部的には101から200になっています。
以下のコードの箇所で、バトル時だけピクチャ番号にピクチャの最大枚数(100)を足して、ピクチャ番号を変換しています。
マップや戦闘以外でもピクチャを扱うようなプラグインではさらに201から300を扱うなどの対応をしているものがあります。

1
2
3
4
5
6
7
Game_Screen.prototype.realPictureId = function(pictureId) {
if ($gameParty.inBattle()) {
return pictureId + this.maxPictures();
} else {
return pictureId;
}
};

コンソールに$gameScreen._picturesと入力すると使っているピクチャの情報が出力されます(どのピクチャ番号が使われているかを見るのにも便利だったりします)。
マップと戦闘時にピクチャ10番に表示すると以下のように10と110に設定されているのがわかります。

実際に中身を確認

ちなみに戦闘が終わってもこの101から200のピクチャは残り続け、次の戦闘の開始時に初期化されます。
(セーブファイルも多少大きくなるし、無駄な気がするのですが・・・。)

そのため、ピクチャ最大数を変更するプラグインを使う場合、マップ画面で戦闘のピクチャにアクセスしてしまうなどのバグが発生するケースがあります。
プラグインAではピクチャの最大数が150だと認識しているが、プラグインBではデフォルトの100が最大数だと認識している場合などといったケースです。

RPGツクールMVカテゴリの記事
リリース時のチェック項目
回想の実装を考える
環境依存系のエラー調査など
アイコンセットの画像が大きすぎると黒い四角が表示される
マップのリフレッシュの話
ゲームループの話
最近制作した細かいプラグイン
容量の大きい音声ファイルをロードするとクラッシュする
テストのレポートを作るプラグイン
フィルタをかけると画面全体が拡大されてしまう
並列実行中のコモンを最初から実行するプラグイン
メニューとマップのスクリーンショットについて
イベントのテストでエラーになるプラグインのケース
ロードした結果が異なる場合がある
プラグインの使用状況を出すプラグイン
装備を記憶、ロードするプラグイン
ピクチャの色あいを変えるプラグイン
ピクチャの色相を変えるプラグイン
デバッグ画面にショートカットキーを追加するプラグイン
BGSを保存・再開するプラグイン
敵キャラにデフォルトのステートを付与するプラグイン
ゲーム画面外演出を考える
ニコニコっぽいテキストを表示するプラグイン
一括入力がしやすいテキストエディタプラグインの紹介
ウィンドウをたくさん出すプラグイン
マスクを使ってゲージを作る
複雑な計算式はプラグインで記述する
シーンに引数を渡す
シーンからマップに場所移動
ウィンドウに画像を表示する
スプレッドシートからjsonにしてツクールに取り込む
ランダムにアイテムを取得するプラグイン(MV版)
全てのアイテムを取得するプラグイン
TweenプラグインのTorigoya_Tween.jsが便利
独自のデータをセーブする
loadBitmapを使うときはsmoothに注意する