XSPRITE.FNC 関数リファレンス 【関数一覧表】 sp_xinit() :XSPRITE.FNC関数の初期化 sp_slon(t) :垂直同期割り込み開始 sp_sloff() :垂直同期割り込み停止 sp_slidep(s,[x],[y],v) :スプライトのスライド(位置指定) sp_slidev(s,vx,vy,t) :スプライトのスライド(ベクトル指定) sp_loc(s,[x],[y]) :スプライトの表示位置の設定 sp_hang(s1,s2,x,y) :スプライトの連結 sp_leave(s) :スプライトの連結解除 sp_hgadd(g,s) :接触判定グループのメンバー追加 sp_hgrmv(g,s) :接触判定グループのメンバー削除 sp_hitrng(s,x1,y1,x2,y2):スプライトの接触判定範囲の設定 sp_hiton(s,g) :スプライトの接触判定開始 sp_hitoff(s) :スプライトの接触判定停止 sp_hit(s) :スプライトの接触状況を返す sp_stkon(j,s,vx,vy) :ジョイスティック操作によるスプライトのスライド sp_stkoff(j) :ジョイスティック操作によるスプライトのスライドの中止 sp_xstat(s) :スプライトの状況を返す sp_intcnt() :垂直同期割り込みの割り込み回数を返す bg_slide(b,vx,vy,t) :バックグラウンドのスライド bg_map(b,x,y,ca) :バックグラウンドのマップモードの設定 bg_mpscrl(b,[x],[y]) :マップモード時の表示位置の設定 bg_xstat(b,md) :バックグラウンドのスライド状況を返す xstrig(j,tr) :ジョイスティックのトリガー連打回数を返す scrpri(sp,tp,gp) :スプライト・テキスト・グラフィック面の表示優先順位の設定 【各関数の説明】 ・sp_xinit() 戻り値:なし  XSPRITE.FNC関数の初期化を行う。当関数を実行せずに他の関数(scrpri()を除く)を実行するとエラーになる。スプライトの初期化の際には、sp_init()実行後に当関数を実行する。  具体的な処理内容は、 1)sp_slon()による垂直同期割り込みが発生していれば、割り込みを停止 2)bg_map()によるメモリ確保がなされていれば、メモリを解放 3)全スプライトのスライド停止 4)全スプライトの連結解除 5)全スプライトの接触判定停止 6)全スプライトの接触判定範囲を(0,0)-(15,15)に設定 7)接触判定グループの全メンバー削除 8)バックグラウンドのスライド停止 9)割り込み回数カウンタのクリア 10)トリガー連打回数カウンタのクリア である。 ・sp_slon(t) t :〔char, 0〜15〕割り込み周期 戻り値:なし  垂直同期割り込みを開始する。引数の値により、垂直同期周期(t+1)回に1度の周期で割り込み処理を行う。 ・sp_sloff() 戻り値:なし  垂直同期割り込みを停止する。 ・sp_slidep(s,[x],[y],v) s :〔char, 0〜127 〕スプライトのプレーン番号 x :〔int , 0〜1023〕スライド先のX座標(省略時は現在のX座標) y :〔int , 0〜1023〕スライド先のY座標(省略時は現在のY座標) v :〔int , 1〜2047〕移動スピード 戻り値:なし  スプライトsを座標(x,y)にスライドさせる。vはX方向・Y方向のうち、移動幅の大きい方の移動スピード。 ・sp_slidev(s,vx,vy,t) s :〔char, 0〜127 〕スプライトのプレーン番号 vx:〔int , -2047〜2047〕X方向の移動ベクトル(右方向が+) vy:〔int , -2047〜2047〕Y方向の移動ベクトル(下方向が+) t :〔int , 1〜32767 〕スライド時間 戻り値:なし  スプライトsを指定したベクトルでスライドさせる。引数tにより、(t×[割り込み周期])の間だけスライドする。例えばsp_slon(0)が実行された状態でtに120を指定すると、120×(1/60)=2秒間スライドする。 ・sp_loc(s,[x],[y]) s :〔char, 0〜127 〕スプライトのプレーン番号 x :〔int , 0〜1023〕X座標(省略時は現在のX座標) y :〔int , 0〜1023〕Y座標(省略時は現在のY座標) 戻り値:なし  スプライトsを座標(x,y)に表示する。表示位置を設定する際は必ずこの関数を使い、sp_move()やsp_set()は使わないこと(表示位置以外の設定のためにsp_move()やsp_set()を使用するのは可)。 ・sp_hang(s1,s2,x,y) s1:〔char, 0〜127 〕スプライトのプレーン番号 s2:〔char, 0〜127 〕スプライトのプレーン番号 x :〔int , -128〜127〕連結位置X y :〔int , -128〜127〕連結位置Y 戻り値:なし  スプライトs1にスプライトs2を連結する。連結する位置はスプライトs1の位置を(0,0)としてドット単位で指定する。スプライトs1とスプライトs2はスライド中またはジョイスティック操作中であってはならない。  3個以上のスプライトをいもづる式に連結することもできる。  なお、当関数を実行しただけではスプライトs2は連結位置に表示されず、スプライトs1に対してsp_slidep()・sp_slidev()・sp_loc()のどれかを実行する必要がある。 ・sp_leave(s) s :〔char, 0〜127〕スプライトのプレーン番号 戻り値:なし  プレーン番号sのスプライトに連結したスプライトを切り離す。スプライトsはスライド中またはジョイスティック操作中であってはならない。 ・sp_hgadd(g,s) g :〔char, 0〜15 〕接触判定グループ番号 s :〔char, 0〜127〕スプライトのプレーン番号 戻り値:なし  スプライトsを接触判定グループgのメンバーに加える。接触判定グループとは、sp_hiton()関数でスプライトの接触判定を行う際に、どのスプライトとの接触を判定するかを指定するためのものである。 ・sp_hgrmv(g,s) g :〔char, 0〜15 〕接触判定グループ番号 s :〔char, 0〜127〕スプライトのプレーン番号 戻り値:なし  スプライトsを接触判定グループgのメンバーから削除する。 ・sp_hitrng(s,x1,y1,x2,y2) s :〔char, 0〜127〕スプライトのプレーン番号 x1:〔char, 0〜255〕接触判定範囲の左上のX座標 y1:〔char, 0〜255〕接触判定範囲の左上のY座標 x2:〔char, 0〜255〕接触判定範囲の右下のX座標 y2:〔char, 0〜255〕接触判定範囲の右下のY座標 戻り値:なし  スプライトsの接触判定範囲を設定する。スプライトパターンが16×16ドットより小さい場合には、接触判定範囲もそれに応じて小さく設定すると自然な接触判定がなされる。また16×16ドットを超える範囲指定もできるため、複数のスプライトを連結して大きなパターンを扱う場合でも、接触判定はひとつのスプライトのみで行うことができる。 ・sp_hiton(s,g) s :〔char, 0〜127〕スプライトのプレーン番号 g :〔char, 0〜15 〕接触判定グループ番号 戻り値:なし  スプライトsの接触判定を開始する。判定を行うのは接触判定グループgのメンバーになっているスプライトとスプライトsとの間の接触だけである。  接触判定は割り込み処理中に行われ、接触があった場合にはsp_hit(s)の戻り値を接触したスプライトのプレーン番号にして接触判定を停止する。接触がなかった場合には次回の割り込み処理でも判定を続ける。  接触判定が割り込み処理で行われるため、sp_loc()でスプライトを動かして接触した場合には、移動後に割り込み処理があるまで接触が検出されない点に注意すること。 ・sp_hitoff(s) s :〔char, 0〜127〕スプライトのプレーン番号 戻り値:なし  スプライトsの接触判定を停止する。 ・sp_hit(s) s :〔char, 0〜127〕スプライトのプレーン番号 戻り値:〔int, 0〜127 or 255〕接触したスプライトのプレーン番号(255=接触なし)  スプライトsの接触判定状況を返す。当関数は1度実行すると次回からの戻り値が255にリセットされる。 ・sp_stkon(j,s,vx,vy) j :〔char, 1〜2 〕ジョイスティック番号 s :〔char, 0〜127〕スプライトのプレーン番号 vx:〔char, 0〜255〕X方向の移動ドット数 vy:〔char, 0〜255〕Y方向の移動ドット数 戻り値:なし  スプライトsをジョイスティックjの操作に応じてスライドするようにする。  移動可能範囲はグラフィック画面で設定する。512×512ドットモード画面(16,256,65536色のどのモードでもよい)のスクリーン0に、移動可能にしたい座標にだけ奇数のパレットコードを書き込む(従って移動可能範囲は(0,0)-(511,511)の領域に制限される)。例えば、(40,20)-(220,240)の矩形領域を移動可能範囲にしたい場合は、 fill(0,0,511,511,0) fill(40,20,220,240,1) とすればよい。 ・sp_stkoff(j) j :〔char, 1〜2〕ジョイスティック番号 戻り値:なし  sp_stkon()関数で設定したジョイスティック操作によるスライドを中止する。 ・sp_xstat(s) s :〔char, 0〜127〕スプライトのプレーン番号 戻り値:〔int, 0〜7〕スライド・連結状況  スプライトsのスライド・連結状況を返す。 bit0:1=スライド中 , 0=スライド中ではない bit1:1=他のスプライトに連結している , 0=他のスプライトに連結していない bit2:1=ジョイスティック操作中 , 0=ジョイスティック操作中ではない ・sp_intcnt() 戻り値:〔int, 0〜4294967296〕割り込み回数  sp_xinit()を実行してから現在までの垂直同期割り込みの割り込み回数を返す。 ・bg_slide(b,vx,vy,t) b :〔char, 0〜1 〕バックグラウンド番号 vx:〔int , -2047〜2047〕X方向の移動ベクトル(左方向が+) vy:〔int , -2047〜2047〕Y方向の移動ベクトル(上方向が+) t :〔int , 0〜32767 〕スライド時間 戻り値:なし  バックグラウンドbを指定したベクトルでスライドさせる。引数tにより、(t×[割り込み周期])の間だけスライドする。tに0を指定した場合は時間制限なくいつまでもスライドする。また、スライドを停止する場合はvxとvyの両方に0を指定する(この場合、tの値は意味を持たない)。 ・bg_map(b,x,y,ca) b :〔char, 0〜1 〕バックグラウンド番号 x :〔int , 33〜32767 or 0〕仮想画面サイズX y :〔int , 33〜32767 or 0〕仮想画面サイズY ca:〔char型2次元配列 〕マップデータ 戻り値:なし  バックグラウンドbをマップモードにする。マップモードでは任意の大きさのバックグラウンド面を仮想し、仮想画面の表示、スライドを行うことができる。  仮想画面の内容(マップデータ)はchar型2次元配列caで指定する。caの0,1番目の要素に仮想座標(0,0)のパターンコードを代入し、以下(1,0),(2,0)…(x-1,0),(0,1),(1,1)…(x-1,y-1)のパターンコードを代入しておけばよい(従ってcaの要素数はx×y×2)。通常は、 dim mapdata(x×y−1,1) と配列宣言し、mapdata(?,0)に反転指定とパレットブロック、mapdata(?,1)にパターンコードを代入するとよい。  また、x,y共に0を指定して当関数を実行すると、マップモードが解除される。  なお、当関数ではマップデータを格納するためのメモリを確保するが、確保に失敗した場合はエラーとなる。 bg_mpscrl(b,[x],[y]) b :〔char, 0〜1〕バックグラウンド番号 x :〔int , 0〜 〕X座標(省略時は現在のX座標) y :〔int , 0〜 〕Y座標(省略時は現在のY座標) 戻り値:なし  マップモード時、仮想画面の座標で表示位置の設定を行う。マップモード用bg_scroll()。 ・bg_xstat(b,md) b :〔char, 0〜1〕バックグラウンド番号 md:〔char, 0〜2〕モード 戻り値:〔int, 0〜1〕各種スライド状況  バックグラウンドbのスライド状況を返す。 md=0の時 bit0:1=スライド中 , 0=スライド中ではない bit1:1=マップモード , 0=通常モード md=1の時 マップモード時、画面の左上隅のチップの仮想X座標(ドット単位ではなく、チップ単位) 通常モード時の戻り値は常に0 md=2の時 マップモード時、画面の左上隅のチップの仮想Y座標 通常モード時の戻り値は常に0 ・xstrig(j,tr) j :〔char, 1〜2〕ジョイスティック番号 tr:〔char, 0〜1〕トリガー指定(0=トリガーA、1=トリガーB) 戻り値:〔int, 0〜4294967296〕トリガーの連打回数  前回この関数が実行されて以降、ジョイスティックのトリガーが何回押されたか、その回数を返す。 ・scrpri(sp,tp,gp) sp:〔char, 0〜2〕スプライト面の表示優先順位 tp:〔char, 0〜2〕テキスト面の表示優先順位 gp:〔char, 0〜2〕グラフィック面の表示優先順位 戻り値:なし  スプライト・テキスト・グラフィック面の表示優先順位を設定する。引数には優先順位が高い方から0,1,2を指定する。 【エラーメッセージ一覧表】 1:画面モードが不適当です 2:引数が無効です 3:sp_xinit()を実行していません 4:垂直同期割り込みが既に使用中です 5:指定されたスプライトが他のスプライトに連結されています 6:スプライトが静止していません 7:バックグラウンドが静止していません 8:メモリを確保できません