グラフィックス:スプライトと背景について
基礎概念10で文字列がプレーンテキストとマルチスタイルテキストで大まかに二種類に分類できたように、グラフィックスもおおまかな分類で二種類に分けることができます。それが「スプライト」と「背景」です。ここでは動画ファイル(AVI、Mpeg)などの再生は含みません。
MMF2の「アクティブオブジェクト」はいわゆる「スプライト」です。スプライトについてはWikipediaに詳細が載ってましたから以下に引用します。一方スプライトに対して「背景」というものがあり、この「背景」は一度設置したら基本的に動かすことができません。背景は背景として張り付ける際に障害物とするか否かの設定があって、この設定次第でスプライトとの「コリジョン(衝突判定)」を設けることができます。
概要
この機能は、画面表示における映像の情報を記憶しているビデオRAMとは別に、多数の小さな画像を用意しておき、画面上の任意の位置(1ピクセル単位で指定可能)にハードウェアで合成して表示する物である。
この機能は、背景となる画像や複数のスプライトで重ね合わせて合成表示ができるようになっており、複数のスプライトが重なったときに、どのスプライトを前面に表示するかをプログラム上において優先順位を指定する事が可能で、これを利用して細かい映像表現も可能である。
これはアニメーションにおけるセル画の概念に近いが、更にセル画に例えるなら、背景の上にキャラクタの大きさに切ったセル画を置いて、1コマ毎にキャラクタのセル画を背景上で動かしていくという物である。
ここまで引用
MMF2でスプライトを扱うデフォルトのエクステンションは「アクティブ(オブジェクト)」だけです(※1)。前述の背景は細かい用途ごとに「ピクチャ」「アクティブピクチャ」「背景」「クイック背景」と最初から4種類ほどあります。そして「アクティブ(オブジェクト)」もゲーム中に表示しているグラフィックスを背景として貼り付ける機能をもってます。つまり背景は工夫次第で色々代理が効くのですが「アクティブ(オブジェクト)」に代わる機能をもったエクステンションは最初に一つしかありません。そしてアクティブと他ピクチャ(バックグラウンド/背景)系エクステンションとの一番大きな違いはオブジェクト同士のコリジョン(衝突判定)を持つか持たないかです。
※1:SDKを読むと厳密には「文字列」や「カウンター」もSurfaceにBlitされてるようなのであれもスプライト。オブジェクト同士の衝突を検出できるものはだいたいスプライトと思えば良さそう。
プロパティの違いを見る
どちらのオブジェクトにも共通して「Click Movement=動作タブ(青い人形のアイコン)」があるということは即ちユーザー(あるいはプレイヤー)が位置などを任意操作できるオブジェクトという意味です。「アクティブピクチャ」はグラフィックを「背景」として扱うオブジェクトなのですが、アプリケーションの実行中にClick Movementなどを使ってグラフィックの位置を操作できるのが特徴の一つです。しかしこれにはコリジョンが無い、つまり操作はできてもオブジェクト同士やオブジェクトと背景の衝突・重なりを判定することができない仕様となっています。
その他の違いとして、アクティブピクチャにはランタイムオプションに衝突のファイン判定がありません。メモリオプションも無いためグローバルオブジェクト化することもできませんし、全体的にプロパティから設定できることはアクティブオブジェクトより少なめです。
「アクティブピクチャ」は画像を外部ファイルから適時読み込んで表示するタイプのエクステンションなのに対して「アクティブ」はあらかじめMMF2実行ファイル内部にグラフィックスを内包し、内部で保持された画像はゲーム中に外部から画像を読み込んで適時置き換えるなどができない仕様のオブジェクトとなっています。ちなみに「アクティブピクチャ」は動画Gifファイルを読み込むことができますが、アニメーションは不可です(画像は表示はされるけどアニメーションしないから意味が無い)。
以上プロパティの比較から分かったこと
背景として実際に張り付けないと障害物としてのコリジョンを持てないので、背景として張り付けるまでは「位置を動かせる絵(ピクチャ、アニメ不可)」扱いのオブジェクトってことになります。なんとなく名前の意味が分かりましたね。そしてピクチャ→背景として張り付けたあとは完全に「背景」になっちゃうので張り付けた背景はもうピクチャのように位置を動かすことはできなくなります。つまり(アクティブ)ピクチャじゃなくなっちゃうんです。
- 「背景」は動かせない
このように基本としてまず「背景」はスプライトと異なり一度背景として張り付けたら位置を動かせない(動かしたい場合は代わりにフレーム、あるいはレイヤーなどを動かす)、この仕様をまず覚えておく必要があります。でも実際にはループしたり流れたりする背景があるじゃないかと思うかもしれませんが、あれは背景を動かしているのではなくて画面位置やプレイヤー位置などを操作して背景が動いているように見せているだけです。