前回に引き続き、プチコンの主要機能である「SPRITE」について紹介する。
残り回数わずかな本連載において、2回に渡って同じ機能を取り上げるのは心苦しい面もあるのだが、それでもSPRITEは1回では紹介しきれないほどのボリュームと可能性を持っている。
プチコン3号ではカラーパレットが廃止され、SPRITEにもフルカラーが使用できるようになった。SPCOLORはRGBそれぞれに対して元データのどれくらいの割合の輝度で描画するかを指定する。RGB(255,255,255)であれば元データそのまま、RGB(255,0,0)であれば赤成分のみの描画になる。ボスキャラなど1発では倒せない「硬い」敵のダメージ表現などに使えるだろう。さらに透過率を設定することもできるので、描画フレームを間引く擬似半透明のテクニックを使わなくても簡単に半透明が表現可能だ。
SPLINKも使い途の多い命令だ。SPLINKは各SPRITEの位置指定を画面座標ではなく特定のSPRITE(親SPRITE)、つまり、親SPRITEからの相対座標として扱う。親SPRITEが動けば追従して子SPRITEも移動する。多関節キャラクタ、トラクタービームでとらえられたギャプラスの敵機、R-Typeのフォース、ゼビウスのシオナイトなど自機に追従するものや、放射状に弾をばらまくガルザカートなどの弾幕(中央に非表示の親SPRITEを残す)など、応用力は高い。SPUNLINKでリンク解除できる。
機能としては変わらないものの、命令や指定方法が変更されたものもある。
SPRITEの衝突判定領域を指定するSPCOLでは衝突判定をするグループ分けがプチコンmkIIの8ビットから32ビットに拡張された。例えば、自機を&HFFFF0000、自弾を&H0000FFFF、敵を&H00010001、&H00020002、&H00040004、……に割り当てると自機と敵、自弾と敵は衝突判定されるが、自弾と自機、敵機同士は衝突判定されない。
衝突判定そのものはプチコンmkIIの「SPHIT()」と「SPHITSP()」が「SPHITSP()」に統合されている。プチコンmkIIではSPHIT()は同じグループ内の衝突を検出、SPHITSP()は2つのSPRITEを指定して衝突を判定していた。プチコン3号ではSPHITSP()の引数によって両方の機能を使い分けるようになった。
また、プチコンmkIIでは衝突判定結果をシステム変数SPHITNO(衝突相手)、SPHITX,SPHITY(衝突相手の座標)、SPTT(衝突時刻)で受け渡していた。プチコン3号ではこれをSPHITINFO命令で直接変数に取得する。各SPRITEの速度も取得できるようになった。
そのほか、SPRITE画面全体のクリッピング領域を指定するSPCLIP、各SPRITEごとにアニメーションを開始/停止するSPSTART/SPSTOPが追加されている。補間動作中のSPRITEの情報を取得するSPREAD()はSPOFS(座標)、SPROT(角度)、SPSCALE(スケール)、SPCHR(キャラクタ)にそれぞれ分担された。SPRITE変数の読み書きがSPGETV/SPSETVからSPVARに変更されたのはBGVARなどと同様だ。
説明(1/2)
SPRITEの表示色を設定
引数
管理番号
対象のSPRITEの管理番号:0〜511
色コード
ARGB=8888形式の32ビット色コード
・RGB関数で指定すると便利 RGB(A,R,G,B)
・Aの値を小さくすると透明度が上がる
※実際の表示色は、色コードに元のドット色を乗算したものになる
説明(2/2)
SPRITEの表示色を得る
引数
管理番号
対象のSPRITEの管理番号:0〜511
色コード
現在の色コードが返る変数(32ビットARGB)
説明
8ビットRGB値をもとに色コードを得る
・各種グラフィック命令の色指定に使用すると便利
・黒→RGB(0,0,0)
・白→RGB(255,255,255)
・薄いグレー→RGB(224,224,224)
・グレー→RGB(128,128,128)
・濃いグレー→RGB(64,64,64)
・赤→RGB(255,0,0)
・ピンク→RGB(255,96,208)
・紫→RGB(160,32,255)
・水色→RGB(80,208,255)
・青→RGB(0,32,255)
・黄緑→RGB(96,255,128)
・緑→RGB(0,192,0)
・黄色→RGB(255,224,32)
・オレンジ→RGB(255,160,16)
・茶色→RGB(160,128,96)
・薄紅色→RGB(255,208,160)
引数
A
透明度情報(255:不透明、それ以外:透明)
※ただしSPCOLORでは0〜255で透明度を指定可能
R,G,B
R(赤)・G(緑)・B(青) 8ビット階調(各0〜255)
戻り
変数=色コード(ARGB各8ビット) ※GCOLORを参照
説明(1/3)
SPRITE用内部変数への書き込み
※SPRITE用内部変数:SPRITE内に8個ずつあるユーザー用の変数
引数
管理番号
対象のSPRITE管理番号:0〜511
内部変数番号
内部変数の番号:0〜7
数値
内部変数に登録する数値
説明(2/3)
SPRITE用内部変数の読み込み
※SPRITE用内部変数:SPRITE内に8個ずつあるユーザー用の変数
引数
管理番号
対象のSPRITE管理番号:0〜511
内部変数番号
内部変数の番号:0〜7
戻り
SPVARで書き込んだ値
説明(3/3)
SPRITE用内部変数の読み込み
※SPRITE用内部変数:SPRITE内に8個ずつあるユーザー用の変数
引数
管理番号
対象のSPRITE管理番号:0〜511
内部変数番号
内部変数の番号:0〜7
数値
内部変数の値が戻る数値変数
(著者注:数値リテラルではなく、変数名)
説明
SPRITEを別のSPRITEにリンクさせる
・リンクするのは座標のみ(回転角度や倍率情報はリンクしない)
・リンク先(親)に指定できるのは、リンク元(子)より小さい管理番号のSPRITEのみ
・子の表示座標は、親を基準とした相対座標となる
(画面左上が原点とはならなくなる)
・リンクの階層に制限はない
引数
管理番号
リンク元(子)のSPRITEの管理番号:0〜511
リンク先管理番号
リンク先(親)のSPRITEの管理番号:0〜511(リンク元より小さいこと)
説明
SPRITEのリンクを解除
引数
管理番号
リンクを解除するSPRITEの管理番号:0〜511
説明
SPRITE衝突判定領域の設定
引数
管理番号
対象のSPRITE管理番号:0〜511
始点X,Y
判定領域の始点座標:X,Y 各 -32768〜32767
※SPHOMEを原点(0,0)とした相対座標
幅,高さ
判定領域の幅と高さ:W,H 各 0〜65535
スケール対応
TRUE=SPSCALEの指定に判定領域のサイズを同期(省略時=TRUE)
FALSE=無視
マスク
0〜&HFFFFFFFF(32ビット)
※衝突判定時に互いのビットのANDをとり、0であれば衝突していないとみなす
説明(1/2)
SPRITEに衝突した別のSPRITEを検索
引数
判定するSPRITEの管理番号:0〜511
省略すると、前回のSPHITSP命令と同条件で続きから検索
戻り
衝突したSPRITEの管理番号(衝突のないとき-1)
説明(2/2)
SPRITE同士の衝突判定
引数
管理番号
判定するSPRITEの管理番号:0〜511
相手管理番号
相手側のSPRITEの管理番号:0〜511
戻り
FALSE=衝突なし、TRUE=衝突
説明(1/3)
衝突判定結果の情報を取得(1)衝突時間
引数
衝突時間
衝突時間が戻る変数:0〜1の実数値
(判定時の位置+速度×衝突時間が衝突座標と一致)
説明(2/3)
衝突判定結果の情報を取得(2)衝突時間と2物体の衝突座標
引数
衝突時間
衝突時間が戻る変数:0〜1の実数値
(判定時の位置+速度×衝突時間が衝突座標と一致)
物体1座標X,Y
衝突時の物体1の座標が戻る変数
物体2座標X,Y
衝突時の物体2の座標が戻る変数
説明(3/3)
衝突判定結果の情報を取得(3)衝突時間と2物体の衝突座標・速度
引数
衝突時間
衝突時間が戻る変数:0〜1の実数値
(判定時の位置+速度×衝突時間が衝突座標と一致)
物体1座標X,Y
衝突時の物体1の座標が戻る変数
物体1速度X,Y
衝突時の物体1の速度が戻る変数
物体2座標X,Y
衝突時の物体2の座標が戻る変数
物体2速度X,Y
衝突時の物体2の速度が戻る変数
説明
SPRITEのクリッピング領域を指定
引数
始点X,Y
クリップ領域の始点座標
終点X,Y
クリップ領域の終点座標
※始点・終点を省略すると、画面全体が表示領域となる
説明
SPRITEのアニメーションを開始する
引数
管理番号
対象のSPRITEの管理番号:0〜511
※管理番号を省略すると、全SPRITEのアニメーションを開始する
説明
SPRITEのアニメーションを停止する
引数
管理番号
対象のSPRITEの管理番号:0〜511
※管理番号を省略すると、全SPRITEのアニメーションを停止する
次回はワイヤレス通信を紹介しよう。
Copyright © ITmedia, Inc. All Rights Reserved.