SP_PUT


 [機能] 指定のスプライトを指定座標に表示します。

 [書式] SP_PUT n,(x,y), [,pt] [,反転スイッチ]

 [説明]
  n: スプライトナンバー。 (0~255)まで使えます。
  スプライトナンバーが大きいものが手前に表示されます。
  x,y: 配置座標。小数値を含んだ値でも可。
  pt: 'SP_DEF'で定義されたパターンナンバー。
  反転スイッチ: 0(または省略).反転無し  1.x反転  2.y反転  3.xy反転 

  *省略形で高速化(応用)
  sp_put 10 のようにスプライトナンバーだけ指定して以下省略すると、
  そのスプライトナンバーで前に指定した変数のアドレスを直接参照するようになります。
  最初に変数指定で記述してループ時に省略することにより若干高速化することができます。
 [例]
     sp_put i,(cx(i),cy(i)),cp(i)
     '...loop
     for i=0 to ec
     cx(i)+=1
     sp_put i
     next
     'この例ではcx(i),cy(i),cp(i)が固定の変数になり、各アドレスの値を直接参照しています。
     'サンプル'acsamp.bas'に使用例があります。

 [例] スプライト表示サンプル
  [smp_sp.bas]
   100 circle(7,7),7,col(9)
   110 circle(7+16,7),7,col(10)
   120 circle(7+32,7),7,col(12)
   130 get@(0,0),48,16,(0,0)
   140 sp_def 0,(0,0),16,16
   150 sp_def 1,(16,0),16,16
   160 sp_def 2,(32,0),16,16
   170 sp_on 0,1:sp_on 1,1:sp_on 2,1
   180 dim x(3)
   190 for i=1 to 100
   200 sp_put 0,(x(0),16),0 : x(0)=x(0)+1
   210 sp_put 1,(x(1),48),1 : x(1)=x(1)+2
   220 sp_put 2,(x(2),80),2 : x(2)=x(2)+3
   230 vsync
   240 next



  SP_DEF


 [機能] グラフィックバッファの指定の範囲をスプライトパターンとして定義します。

 [書式] SP_DEF n,(x1,y1),x2,y2

 [説明]
  (x1,y1) 定義するパターンのバッファでの開始座標。
  x2,y2 パターンの幅。
  n: 定義されるパターンナンバー。 (0~255)まで定義できます。

 [例]



  SP_ON


 [機能] スプライトの表示/非表示を 1/0 で切り替えます。

 [書式] SP_ON n,sw

 [説明]
  n: スプライトナンバー
  sw=1 表示  sw=0 非表示

 [例]



  SP_MOVE


 [機能] スプライトを指定の動作パターンで自動的に動かします。

 [書式] SP_MOVE n,[pt],[d1],[d2],[d3],[d4]

 [説明]
  設定されたスプライト(表示ONのもの)はフレーム毎で移動を続けます。
  n: スプライトナンバー
  pt: 動作パターン
  pt=1 現在動作パターンは1番の直進のみです。
  X方向に毎フレームd1ずつ移動します。
  Y方向に毎フレームd2ずつ移動します。
  移動量は小数単位で指定できます。

  d3,d4ではスプライトのアニメーションパターンを指定します。
  sp_defで定義された通常表示されるスプライトパターンを基点として
  グラフィックバッファで右方向にスプライトのX幅単位で何個までずらしていくかをd3で指定します。
  (グラフィックバッファに予め横に並ぶようにアニメパターンを並べて描画しておきます)
  アニメーションパターンは指定された数でループします。
  例えばd3=4を指定すると基点1から始まり4番目のパターンまで来ると次は1番に戻ります。
  d4は何フレーム単位で次のアニメパターンへ移っていくかを指定します。(アニメの速度)

  pt=0 を指定すると動作とアニメーションが止まります。
  現在のスプライトの座標等の情報はsp_stat関数で取得できます。
  *この命令により毎フレーム動作が行われるため、
  (,i)モードではタイミングが追いつかずに(,c)モードと異なる動作になることがあります。

 [例] スプライト 自動ムーブ&アニメーション、スワップ サンプル
   [smp_mv_anm.bas]
    100 screen 1,1,1,0:cls 3
    110 for i=0 to 15
    120 if i>7 then j=7-(i-8) else j=i
    130 circle(i*32+16,16),7+j
    140 next
    150 get@(0,0),32*16,32,(0,0):cls 2
    160 sp_def 1,(0,0),32,32
    170 sp_def 2,(0,0),32,32
    180 sp_on 1,1
    190 sp_on 2,1
    200 sp_move 1,1,1,0,16,8
    210 sp_put 1,(32,100),1
    220 sp_put 2,(32,200),2
    230 while -1
    240 vsync 256
    250 sp_swap 1,2
    260 k=-(k-1)
    270 print "Swap move sprite ";k+1
    280 sp_put k+1,(32,sp_stat(k+1,1)),1
    290 wend



  SP_SWAP


 [機能] 2つのスプライト間で全情報を交換します。

 [書式] SP_SWAP sp1,sp2

 [説明]
  sp1,sp2で交換するスプライトナンバーを指定します。
  交換されるデータは
  XY座標、XYサイズ、表示パターン、表示状態、マージンサイズ、
  衝突判定のターゲットと'sp_hit()'で得られる値、'sp_move'の移動パターンとデータ です。

 [例]



  SP_ORDER


 [機能] スプライトの表示優先順位開始番号を指定します。

 [書式] SP_ORDER n

 [説明]
  通常スプライトは0番が一番奥に、255番が一番手前に表示されます。(デフォルト n=0 の状態)
  例えば sp_order 64 を指定した場合、表示優先は
  奥 64~255 0~63 手前
  このような順位にに変更されます。


  SP_STAT


 [機能] スプライトの情報を取得します。

 [書式] SP_STAT(n,d)

 [説明]
  n: スプライトナンバー。
  d: 情報の種類
   0: x 座標
   1: y 座標
   2: 現在のパターンの X サイズ
   3: 現在のパターンの Y サイズ
   4: パターンナンバー
  5:表示状態 表示=1 非表示=0
   6: SP_MOVEでの動作パターン番号
   7: SP_MOVEでのデータ1(X移動量)
   8: SP_MOVEでのデータ2(Y移動量)

 [例]



  VSYNC


 [機能] 画面描画が定期更新(1/60秒)されるまで待ち、同期のタイミングを図ります。

 [書式] VSYNC [n]

 [説明]
  現在FPS(Frames Per Second)は最大60に設定されています。(1秒間に60回描画される)
  この命令は前回の更新を覚えておき、新たな更新がなされているか確認して
  更新されると次の命令に進みます。
  n が指定されている時はn/60秒間隔になります。(省略時はn=1)
  ループ中に記述することによりスプライトの動作が一定の速度に保たれます。
 [例]
    100 line(0,0)-(31,31),col(9),bf
    110 get@(0,0),32,32,(0,0)
    120 sp_def 0,(0,0),32,32
    130 cls 3 : sp_on 0,1
    140 for i=1 to 300
    150  x=x+1: y=100
    160  sp_put 0,(x,y),0
    170  vsync 1
    180 next
    190 x=0 : goto 140



  SP_OUT


 [機能] スプライトがバックグラウンド画面表示範囲の内にあるか調べます。

 [書式] SP_OUT(スプライトナンバー)
 [説明]
  指定されたスプライトがBGグラフィック画面表示範囲の内側なら 0を
  外側(非表示エリア)なら -1を返します。
  画面内側のエリアはBG_GDSETの第3パラメータの指定分だけ枠を広げることができます。
  デフォルトは1pixcel分四方に広くなっています。(BG_GENEで現れたスプライトが出現と同時に消滅しないように)

 [例]
    if sp_out(1) then print"outside."



  SP_CHECK


 [機能] スプライト同士の衝突判定を行います。

 [書式] SP_CHECK
 [説明]
  あらかじめSP_TARGETで各スプライトの衝突対象を設定しておきます。
  SP_CHECKが実行された時点で重なっているスプライトの情報をSP_HITで読み取ることができます。
  スプライトの見た目より衝突サイズを小さくする時はSP_MARGINでその余白を指定します。

 [例]




  SP_HIT


 [機能] 指定のスプライトが重なっている対象のスプライトナンバーを返します。(関数)

 [書式] SP_HIT(n,m)

 [説明]
  n: 調べる元のスプライトナンバー(範囲0~255)
  m: 何番目
  m=0の時は衝突しているスプライトの数を返します。
  1~以降は順に衝突している相手のスプライトナンバーを返します。
  衝突数以上の数を指定すると-1を返します。
  非表示になっているスプライトは衝突判定されません。(元が非表示の時は衝突数は0個です)

 [例]
  1番を調べて4番と6番に衝突している場合。
   sp_hit(1,0) -> 2
   sp_hit(1,1) -> 4
   sp_hit(1,2) -> 6
   sp_hit(1,3) -> -1



  SP_TARGET


 [機能] 指定スプライトの衝突対象の範囲を指定します。

 [書式] SP_TARGET スプライトナンバー,開始位置,終了位置

 [説明]
  指定のスプライトの衝突判定範囲を開始位置から終了位置までにします。(範囲0~255)
  判定を無しにするときは開始位置を終了位置より大きな値にします。

 [例]

 


  SP_MARGIN


 [機能] スプライトで衝突判定がない余白部分のサイズを指定します。

 [書式] SP_MARGIN スプライトナンバー,余白ピクセル数

 [説明]
  外縁の四方の余白ピクセル数分だけ衝突しない領域に設定されます。
  0を指定すると表示サイズと同じ判定サイズになります。
  'SP_BGHIT'の判定のサイズにも影響を与えます。

  0000 例
  0880 スプライトサイズ4
  0880 '0'は余白領域(衝突判定がない領域)を示しています。
  0000 Margin size=1


 [例] スプライト衝突サンプル
   [smp_hit_mgn.bas]

    100 line(0,0)-(15,15),col(9),b
    110 get@(0,0),16,16,(0,0) :cls 3
    120 sp_def 0,(0,0),16,16
    130x=0:y=100
    140 sp_on 0,1:sp_on 1,1
    150 sp_target 0,0,1
    160 sp_margin 0,2
    170 sp_put 1,(100,100),0
    180 x=x+1
    190 sp_put 0,(x,y),0
    200 sp_check
    210 for i=1 to sp_hit(0,0)
    220 print"Hit no";sp_hit(0,i)
    230 next
    240 if sp_hit(0,0)>0 then stop
    250 vsync
    260 goto 180



  SP_PRINT


 [機能] スプライトバッファに文字を書き込みスプライトで文字を表示させます。

 [書式] SP_PRINT pt, "表示文字列" ,x ,y [,フォントサイズ]

 [説明]
  pt: 'SP_DEF'で定義されたパターンナンバー。
    バッファの指定位置、この枠内に文字を書き込みます。
  "表示文字列": スプライトバッファに書き込む文字列。
    ここを chr$(12) とすると cls と同じ機能(エリア内の文字クリア)になります。
  x,y: 書き込む文字座標。
    ptの指定エリアの左上を(0,0)として文字単位で座標指定します。
  フォントサイズ: 文字のサイズです。
    省略もできます。 font 命令でもサイズ変更できます。
    座標系(表示できる文字数)に影響を与えます。
    サイズは8pixelの倍数に丸められます。

  表示の流れとしてはSP_DEFで文字の書き込み場所を確保して
  SP_PUT SP_ON で実際の表示を割り当て、表示位置指定して
  SP_PRINTで実際にバッファへ文字を書き込み、
  それが画面に表示されるという形になります。
  一枚のスプライトで文字表示用のウインドウのような使い方ができます。

  さらに事前にカラーを指定する必要があります。
  テキスト画面の設定と同じ命令を使用します。
  color テキストカラー,グラフィックカラー
  このテキストカラーが文字の色、グラフィックカラーが背景が塗りつぶされる色
  となります。最初は
  color col(15),0
  として背景を黒(透明)にして試して下さい。(デフォルトで白になっている)
  文字は何度も上書き可能なので前の文字はこの背景色で毎回クリアされることになります。

[例]"smp_spprint.bas"
   10 color col(15),0
   20 sp_def 1,(128,128),160,96
   30 sp_put 1,(32,32),1
   40 sp_on 1,1
   50 sp_print 1,"SC-12800",1,1
   60 sp_print 1,"LEFT OOO",1,2