強化スプライトは1ラインあたり1色(+透明)しかなく、それを2枚重ねた(同じ座標に表示した)としても、通常は1ラインあたり2色(+透明)しか使えないはずです。 しかし、あることをすれば、ちょっとした制約つきですが、上記の通り2枚重ねて1ラインあたり3色(+透明)の表示が可能となります。 こうした「スプライト重ね合わせ処理」は、おそらく多くの市販のソフトに用いられてきたものだと考えられます。
ここでは、スプライト重ね合わせ処理の実現方法を、BASICと機械語、それぞれの場合にわけて書いてみました。 さあ君も重ね合わせのマジックに挑戦だ! 小さいものならとりあえずゲームの自キャラだけでもスプライト重ね合わせ処理をやってみよう。 結構見栄えよくなると思うぞ。
COLOR SPRITE$(スプライト面番号)="文字式"文字式は16字以下の文字列で、1文字目には1ライン目の色情報を示す文字、2文字目には2ライン目の色情報を示す文字、......n文字目にはnライン目の色情報を示す文字が入りますね(nは1以上16以下の整数)。
「色情報を示す文字」とは、色情報をアスキーコードとする文字です。 「色情報」とは普通、そのラインのカラー番号(0〜15の整数)です。 例えば、8×8ドットの、面番号0のスプライト面を(全8ラインについて)緑色(カラー番号2)にしたい場合を考えてみましょう。 この場合、全8ラインについて、色情報は2となり、色情報を示す文字は、アスキーコード2の文字すなわち
CHR$(2)となります。 したがって、色の指定プログラムは、
COLOR SPRITE$(0)=CHR$(2)+CHR$(2)+CHR$(2)+CHR$(2)+CHR$(2)+CHR$(2)+CHR$(2)+CHR$(2)と書けばいいわけです。
ところで、色情報で与えられる情報はカラー番号だけではありません。
カラー番号に一定の値を足したものを色情報とすることにより、そのラインを32ドット左にずらしたり、衝突判定をさせなかったり、そしてスプライト重ね合わせ処理を実現することができます。
スプライト重ね合わせ処理を実現したい場合、重ね合わせる2枚のスプライト面(の各ライン)について、その色情報を以下のようにします。
? 1枚目の(ラインの)カラー番号 OR 2枚目の(ラインの)カラー番号例えば、1枚目のカラー番号が2、2枚目のカラー番号が4の場合、3番目のカラー番号は、
? 2 OR 4 6 Ok ■で、6になることが分かります(「Ok」の部分、要するにプロンプトは「ready」とか「スバル」(自分の場合)とかになるかも知れませんが(^^;))。 2と4は逆にしても構いません。
このように、スプライト重ね合わせ処理による「3番目の色」は、重ね合わせる2つの色の組み合わせによって決まるので、配色には気をつけましょう。
1000 DEFINT A-Z 1010 SCREEN 5,2:COLOR 15,1:CLS 1020 A$="":FOR I=0 TO 31:A$=A$+CHR$(&HFF):NEXT:SPRITE$(0)=A$ 1030 A$="":FOR I=0 TO 15:A$=A$+CHR$(2):NEXT:COLOR SPRITE$(0)=A$ 1040 A$="":FOR I=0 TO 15:A$=A$+CHR$(64+4):NEXT:COLOR SPRITE$(1)=A$ 1050 PUT SPRITE0,(116,92),,0:PUT SPRITE1,(124,92),,0 1060 GOTO 1060プログラムを実行すると、画面上に3色の四角が現れます。 正方形のパターンの、(全ラインが)カラー番号2と4のスプライト面を「横に」ずらして重ね合わせています(縦にずらすと、面番号が大きい方のスプライト面の、重なっていない部分が表示されません)。 ドットが重なっていない部分(左右のもの)はそのままカラー番号2、4の色(緑、青)が出ていますが、ドットが重なっている部分(中央のもの)は、カラー番号6(=2 OR 4)の色(赤)が出ています。
※ビット演算が分かる方へ
色情報は、ビット単位ではこのページのような構成になっています。
このうち、重ね合わせ処理で重要なのがbit6(CC bit)。
スプライト重ね合わせ処理を実現するには、重ね合わせる2枚のスプライト面のうち、面番号が大きい方のスプライト面(の各ライン)について、色情報のCC bitを1にしなければなりません。
「64を足す」というのはすなわち、bit6(CC bit)を1にすることに相当するわけです。
(SCT + m ×16 + n)番地に格納します。
※スプライトカラー・テーブルの先頭アドレス(SCT)は、スプライトアトリビュート・テーブルの先頭アドレスから512を引くことにより求めることが出来ます。
スプライト重ね合わせ処理を実現するには、重ね合わせる2枚のスプライト面(の各ライン)について、その色情報を以下のようにします。
2 OR 4 = 6で、6になります。
このように、スプライト重ね合わせ処理による「3番目の色」は、重ね合わせる2つの色の組み合わせによって決まるので、配色には気をつけましょう。