スプライトおよびBG画面について



概要


スプライトとは、登録されたパターンを重ね合わせを意識せずに表示出来る機能です。
バックグラウンド(BG)は、スプライトを(重ねず)並べ、背景として使うものです。
一端パターンを登録してしまえば、座標を変更するだけで移動などができます。

X68000にはハード的にスプライトとBGが用意されていましたが、
X-BASIC'ではソフトウエア的に(フレームバッファー方式で)実現しています。

両者は基本的に同じ動作をしますが、完全に同じ見え方を保証するものではありません。

!!誠に申し訳ありませんが、技術不足で現在のスプライトはX68000ほどスムースに動きません。

スプライトの仕様


スプライトは、パターンを表示するプレーンに結びつけて制御します。
複数のプレーンに同じパターンを、同じ色もしくは色違いで割り付けることも出来ます。

各プレーンは、座標の他いくつかの表示属性を持ちます。
この属性はスプライトスクロールレジスタと呼ばれる領域に記録されます。
プレーン毎に持つ属性:
表示座標 int範囲で自由
使うパレットブロック番号 1~31 ; 0は予約で利用不可。iOS型パターンの時は無視される
使うパターン番号 0~511
反転設定
SPRITE_FLIP_NONE 反転なし(省略時)
SPRITE_FLIP_HORIZONTAL 水平反転
SPRITE_FLIP_VERTICAL 垂直反転
SPRITE_FLIP_HORIZONTAL_VERTICAL水平&垂直反転
表示優先順位
SPRITE_PRW_HIDE 表示しない
SPRITE_PRW_BG0BG1SPBG0>BG1>スプライト
SPRITE_PRW_BG0SPBG1BG0>スプライト>BG1
SPRITE_PRW_SPBG0BG1スプライト>BG0>BG1(省略時)
スプライトは、プレーン番号が小さいほど手前に=優先順位が高く、表示されます。

スプライト・バックグラウンド・テキスト・グラフィック画面は重ね合わせができます。
その優先順位はvpriority()で設定します。
スプライトとバックグラウンドの優先順位は、プレーン単位で指定できます。

表示座標の設定は自由で、負数から画面幅を超える座標まで1ドット単位で指定できます。
実際に表示されるのは、実画面内に入った部分のみです。
これにより、画面内での移動だけでなく、画面の外から中(もしくはその逆)の移動でも、処理を分ける必要がなくなります。

グラフィック座標と異なりスプライト座標は整数ですが、基本的に両者に違いはありません。
X68000実機と異なり、x方向に並べられる数に上限はありません。

パターンは、16*16ドットで512パターンが登録できます。

パターンはint型またはchar型1次元配列で与えます。
1要素が1ドットに相当します。

int型の時は、1要素は合成RGB値による色(以下実色)です。これをiOS型と呼びます。
char型の時は、1要素はパレットコードです。これをX68型と呼びます。

要素番号とドット位置の関係は以下の通りになります。
同じパターンで色だけ変えたい場合はパレットコードを使うと便利ですが、
パレットコードは0~15なので、1パターン中で同時に使える色は16色に限られます。

X68型(パレットコードで指定)の場合、別途パレットブロックにて実色との変換テーブルを用意する必要があります。
パレットコードによるパターン定義は、(上位)X68互換です。

パレットコードから実色への変換はプレーン毎の実表示時に行われ、以下の通り処理されます。
  1. スクロールレジスタからパレットブロックを決定する
  2. パターン中からパレットコードを読み出す
  3. パレットブロックから、そのパレットコードに相当する実色を読み出す
なお、iOS型のパターンに対してパレットブロックを設定しても無視されます。

実色が0の場合は透明色と見なし、下になるパターンが透けて見えます。
パレットコードが0でも、その実色が0でない場合は透明になりません。
実色で黒=&h000000ffは透過しません。

x68Color2iOSColor()でX68の色をiOS色に変換したとき、
X68で透過色となる黒&h0000はiOSでは&h000000ffの黒となるため、透過しません。
X68で透過していたスプライトがiOS上で透過しない場合は、ほとんどはこれが原因です。

BG画面の仕様


BG画面は、スプライトのパターンを画面上に並べて表示するものです。
スプライトと異なり、画面一杯に並べることができます。
パターン領域はスプライトと共通です。

BG画面のサイズは2048*2048固定です。
1パターンのサイズも16*16で変化しません。
(このあたりはX68000実機とは異なります。)

BGの表示開始座標の設定は自由で、負数から画面幅を超える座標まで1ドット単位で指定できます。
実際に表示されるのは、実画面内に入った部分のみです。
BG画面サイズは常に表示画面より広なっているため、容易にスクロールが可能です。
パターンの並べ方を指定するのがBGテキストページで、サイズは常に128*128となります。
その各座標位置にパターンを設定します。
BGテキストページの座標(x,y)と表示位置の関係:
0,0 1,0 126,0 127,0
0,1 1,1 126,1 127,1
0,127 1,127 126,127 127,127
BGテキストページは2ページ存在し、それを2枚のBG画面のいずれか(または両方)に設定できます。
2枚のBG画面の優先順位は常にBG0>BG1です。
BGは、sp_disableBG0SPBG1(YES)を設定していない場合、実表示画面数に応じて多くのメモリを消費します。
ご注意ください。

使用上の注意



X68000実機との違い(関数以外)


項目 iOS X68実機
プレーン数 256 128
パターン数 512 256
パレットブロック数32-1 16-1
座標 int範囲で自由 -16~1007
横並び数 無制限 32枚
パターン内要素 実色またはパレットコード パレットコード
BG画面数 常に2 画面解像度およびスプライト枚数により0~2
BG 1パターンサイズ常に16*16 512*512のときは16*16,256*256の時は8*8
BG画面サイズ 常に2048*2048 512*512のときは1024*1024,256*256の時は512*512
BGテキストページサイズ128*128 64*64
利用可能画面解像度全て 512*512,256*256

[戻る]