SPCOL

プチコン3号 プチコンBIG 

スプライトの衝突判定のルールを設定・取得

衝突判定設定を初期化 SPCOL spNo 判定範囲等を設定 (未指定の項目は初期化) SPCOL spNo,scale SPCOL spNo,[scale],mask SPCOL spNo,u,v,w,h[,scale[,mask]] スケール、マスクを取得指定 SPCOL spNo OUT scale[,mask] scale = SPCOL(spNo) 衝突領域、スケール、マスクを取得 SPCOL spNo OUT u,v,w,h[,scale[,mask]]

パラメーター

spNoスプライト番号
u,v,w,h衝突領域の始点x,y,幅w,高さh
scaleスケール(拡大縮小と同期するか)(省略時:FALSE)
maskマスク(衝突とみなすかのグループ分け)(省略時:-1(&HFFFFFFFF))

戻り値

u,v,w,h衝突領域の始点x,y,幅w,高さh
scaleスケール
maskマスク

解説

スプライト同士の衝突判定のルールを設定・取得します。
パラメーターを省略して設定命令を実行すると、未設定の項目は全て初期値にリセットされます。
また、SPCOLを実行していないとSPHITSPなどで衝突とみなされません。(「SPCOL 0」などだけでもOK)

スプライト番号はSPSETで設定済みである必要があります。
始点X,Y,幅W,高さH
スプライトキャラのどの部分で当たり判定を行うかの領域です。
この値が未設定の時はスプライト全体が衝突判定に使われるため、表示上は当たっていなさそうな場合も衝突と判断されてしまいます。
そこで、衝突判定領域を中央付近だけにしたり、他にも剣の先にだけ当たり判定をしたい、などで使用します。
始点U,Y(原点からの相対座標)、幅、高さで衝突範囲を表します。
始点U,Vにはマイナスも設定できます。
U,V,W,Hの設定例
16x16で、原点が左上のキャラの判定領域を中心付近のみにする
u,v,w,h は 4,4,8,8
16x16で、原点が中央のキャラの判定領域を中心付近のみにする
u,v,w,h は -4,-4,8,8
16x16で、原点が下中央のキャラの判定領域を中心付近のみにする
u,v,w,h は -4,-11,8,8
スケール
スプライトキャラを拡大/縮小した時に、衝突範囲も同じく拡大/縮小させるかの設定です。
デフォルトはFALSEで、キャラが拡大/縮小しても衝突領域は変わりません。
衝突領域も変化させる場合はTRUEを設定します。
マスク
衝突判定を行うものと行わないもの(ゲームでいう味方同士・敵同士・敵の弾と敵など)のグループ分けをします。
グループ分けには&H00000000~FFFFFFFFの32bitの数値を使用し、ANDで判定して結果が0の場合は衝突していないと判断されます。
マスク未設定時の初期値は-1(&HFFFFFFFF、どれにも衝突とみなす)です。
マスク値の設定例1
以下の3種類のキャラを使用する場合
・自機:SPCOL 0,,&B01
・自弾:SPCOL 1,,&B10
・敵 :SPCOL 2,,&B11
自機と自弾 の判定
&B 01
&B 10
AND 00 「衝突なし」と判断
自弾と敵 の判定
&B 10
&B 11
AND 10 「衝突」と判断
自機と敵 の判定
&B 01
&B 11
AND 01 「衝突」と判断
マスク値の設定例2(シューティングゲーム)
<手順1>
登場キャラをグループ分けして、どれとどれをヒットさせるか決める
自機自機Op.自弾敵空中敵地上敵弾
自機-00101
自機分身--0000
味方の弾---110
敵空中----00
敵地上-----0
敵の弾------
<手順2>
上表の「1」の部分を、2進数の1ビットずつに割り振る(「1」が4つあるので4桁)
※0ビット目(右端)が「自機と敵空中」、1ビット目が「自機と敵弾」、・・・・
マスク値
2進数10進数
自機&B00113
自機Op.&B00000
自弾&B110012
敵空中&B01015
敵地上&B10008
敵弾&B00102
※2進数でそのまま「SPCOL 0,,&B0011」と指定してもよい

サンプルコード

SPCOL 0 'スプライト0の衝突設定をセット
SPCOL 0,TRUE 'スケール有効化。それ以外をリセット
SPCOL 0,,1   'マスクを1に。それ以外はリセット
SPCOL 0,4,4,8,8,TRUE,1 '(原点が左上にあるとして)中央付近のみを衝突判定させる
 
SPCOL 0 OUT SC,MSK
SPCOL 0 OUT X,Y,W,H,SC,MSK
 

参照

SPPAGE スプライトキャラの定義に使用するグラフィックページを指定・取得
SPCLIP スプライトキャラを表示する範囲を指定
SPDEF スプライトキャラの定義データを変更・取得
SPSET スプライト番号にキャラクターをセット
SPCLR スプライト番号のキャラ設定をクリア
SPSHOW スプライトを表示状態にする
SPHIDE スプライトを非表示状態にする
SPHOME スプライトキャラの原点座標を変更・取得
SPOFS スプライトキャラの表示座標を変更・取得
SPROT スプライトキャラの回転角度を変更・取得
SPSCALE スプライトキャラの表示倍率を変更・取得
SPCOLOR スプライトキャラの色合いを変更・取得
SPCHR スプライトキャラのキャラ種類を変更・取得
SPLINK スプライトの同士をリンク・取得
SPUNLINK スプライトの同士のリンクを解除
SPANIM スプライトにアニメーションを設定
SPSTOP スプライトのアニメーションを一時停止
SPSTART スプライトのアニメーションを再開
SPCHK スプライトのアニメーション状況を取得
SPVAR スプライト用内部変数の値を設定・取得
SPCOL スプライトの衝突判定のルールを設定・取得
SPCOLVEC スプライトの衝突判定用に移動量を設定
SPHITSP スプライト同士の衝突判定
SPHITRC スプライトと指定領域との衝突判定
SPHITINFO スプライトの最後の衝突結果を取得
SPUSED スプライト番号が使用されているかチェック
SPFUNC スプライト番号にコールバック処理を割り当て

Facebookコメント