日刊!プチコン3号――なくてはならない「SPRITE」カウントダウン企画……あと4回

» 2014年11月14日 20時45分 公開
[瓜生聖,ITmedia]

連載:日刊プチコン3号

なくてはならない主要機能「SPRITE」

 80年代レトロPCではSPRITE(スプライト)の有無は重要だった。SPRITEがあれば比較的安価な機種であってもスムーズな動きが実現できるため、アーケードゲームから再現性の高い移植が可能になるからだ。

 だが、ほぼゲームに特化した機能であるためか、逆に高価格帯PCでの搭載は遅く、X68000やFM TOWNSあたりまで待たなくてはならなかった。もちろん、プチコンでは初代から3号に至るまで主要機能の1つとして搭載されている。

 SPRITEは管理番号で管理された透明なセルのようなもので、そこにキャラクタ(画像)を設定することで利用可能になる。セルに書き込むキャラクタを書き換えればキャラクタがアニメーションするし、セルの表示位置を動かせばキャラクタが移動する。

 SPRITEへの画像設定には二通りの方法がある。1つはSPDEF命令でSPRTITEのキャラクタ定義用テンプレートを作成し、その管理番号を使ってSPSET命令で設定する方法。キャラクタ定義用テンプレートにはスプライト画像置き場のグラフィックページ(SPPAGEで指定)のどの部分をどのキャラクタとして定義するかが登録されている。もう1つはSPDEFを使わずに直接SPSETで割り当てる方法だ。

グラフィックページ、キャラクタ定義テンプレート、SPRITEの関係図

 なお、プチコンmkIIではSPSETでSPRITEの使用が可能になるとともに表示されるが、プチコン3号ではSPSETだけでは表示はされず、SPSHOWで明示的に表示させる必要がある。SPRITEの解放はmkIIと同じくSPCLRだが、SPRITEを非表示にするSPHIDEも新たに用意された。解放するまでもないが非表示にしたい場合(やられた敵機や対象に当たった弾など)に利用できるだろう。

 そのほか、SPRITE関連ではmkIIからある命令でも、仕様が変わったものが多い。中でもSPANIM命令は大きく変化している。プチコンmkIIでは移動や回転などを指定する命令に補間時間(何フレームかけて変化させるか)を指定することができるようになっていた。それに対し、補間時間を指定して変更させることはSPANIM命令に集約し、ほかの命令は滑らかな変化ではなく直接指定・設定する場合に利用するように担当分けが変更されている。このような命令にはSPOFS(表示位置)、SPCHR(キャラ番号)、SPROT(回転:プチコンmkIIのSPANGLEに相当)、SPSCALE(拡大/縮小)がある。

関係する命令

SPDEF 定義番号,U,V[,W,H,[,原点X,原点Y]][,アトリビュート]

 説明(1/4)

  SPRITEのキャラクタ定義用テンプレートを作成

 引数

  定義番号

   テンプレートの定義番号:0〜4095

   ※初期状態では1000個以上定義済みなのでそのまま使える

  U,V

   定義する元画像の座標(U:0〜511、V:0〜511)

  (著者注:SPPAGEで指定したグラフィックページの座標)

  W,H

   定義する元画像サイズ 省略時16,16

   ※U+W、V+Hはそれぞれ512以下でなくてはならない

  原点X,Y

   SPRITEの座標基準点 省略時0,0

  アトリビュート

   b0:表示(0=OFF、1=ON) 省略時1

   b1〜b2:回転(0=なし、1=90度、2=180度、3=270度)

   b3:横反転(0=OFF、1=ON)

   b4:縦反転(0=OFF、1=ON)

  (著者注:bnは第nビットを表す。縦反転(b4=1)、90度回転(b1〜b2=01)、表示(b0=1)の場合は10011=19を指定)

SPDEF 数値配列

 説明(2/4)

  SPRITEのキャラクタ定義用テンプレートを配列から一括作成

 引数

  数値配列

   SPRITEのテンプレートデータが格納された数値配列

   ・1個分の要素はU,V,W,H,原点X,原点Y,アトリビュートの7つ

    (要素数は7の倍数である必要がある)

   ・0から順に要素数/7までのSPRITEテンプレートが定義される

SPDEF "@ラベル文字列"

 説明(3/4)

  SPRITEのキャラクタ定義用テンプレートをDATA列から一括作成

 引数

  @ラベル文字列

   SPRITEのテンプレートデータが列挙されたDATA命令のラベル

   ・@ラベル名は""でくくるか、文字列変数で指定する

   ・先頭データは定義するSPRITE数とし、続いて各SPRITEのデータを列挙(1個につき7データ)

   ・1個分の要素はU,V,W,H,原点X,原点Y,アトリビュートの7つ

SPDEF 定義番号 OUT U,V[,W,H,[,原点X,原点Y]][,アトリビュート]

 説明(4/4)

  SPRITEのキャラクタ定義テンプレートの情報を得る

 引数

  定義番号

   テンプレートの定義番号:0〜4095

  U,V

   定義されている元画像の座標

  W,H

   定義されている元画像サイズ

  原点X,Y

   定義されているSPRITEの座標基準点

  アトリビュート

   定義されているアトリビュート b0:表示(0=OFF、1=ON)

   b1〜b2:回転(0=なし、1=90度、2=180度、3=270度)

   b3:横反転(0=OFF、1=ON)

   b4:縦反転(0=OFF、1=ON)

  (著者注:bnは第nビットを表す。縦反転(b4=1)、90度回転(b1〜b2=01)、表示(b0=1)の場合は10011=19を指定)

SPSET 管理番号,定義番号

 説明(1/2)

  SPRITEを作成し、キャラクタ定義テンプレートを割り当てる

  これにより、作成した管理番号のSPRITEが使用可能になる

  ※SPSHOW命令にて表示をONにする

 引数

  管理番号

   作成するSPRITEの番号:0〜511

  定義番号

   SPDEFで定義したテンプレートの定義番号:0〜4095

   (初期状態では1000個以上定義済みなのでそのまま使える)

SPSET 管理番号,U,V,[,W,H],アトリビュート

 説明(2/2)

  SPRITEを作成し、キャラクタを定義する

  (事前にSPDEF命令を使用せず、直接定義する方法)

  これにより、作成した管理番号のSPRITEが使用可能になる

 引数

  管理番号

   作成するSPRITEの番号:0〜511

  U,V

   定義する元画像の座標(U:0〜511、V:0〜511)

  W,H

   定義する元画像サイズ 省略時16,16 ※U+W, V+Hはそれぞれ512以下でなくてはならない

  アトリビュート

   b0:表示(0=OFF、1=ON) 省略時1

   b1〜b2:回転(0=なし、1=90度、2=180度、3=270度)

   b3:横反転(0=OFF、1=ON)

   b4:縦反転(0=OFF、1=ON)

SPSHOW 管理番号

 説明

  SPRITEの表示を開始

 引数

  管理番号

   表示するSPRITEの管理番号:0〜511

SPHIDE 管理番号

 説明

  SPRITEの表示をOFF

  ※表示を隠すだけであり、SPRITEは存在

 引数

  管理番号

   表示を隠すSPRITEの管理番号:0〜511

SPANIM 管理番号,"アニメ対象",データ配列[,ループ]

 説明(1/3)

  SPRITEによるアニメ表示(1) 配列でアニメデータを指定

 引数

  管理番号

   アニメーションを設定するSPRITEの管理番号:0〜511

  アニメ対象

   変化させる要素を管理する数値または文字列

    XY座標:0または"XY"

    Z座標:1または"Z"

    UV座標:2または"UV" ※定義元の座標

    定義番号:3または"I"

    回転:4または"R"

    倍率XY:5または"S"

    表示色:6または"C"

    変数:7または"V" ※SPRITE変数7の値

   ※対象数値に8を加えるか、文字列の末尾に"+"を付けると、

    値は実行時からの相対値として扱われる

  データ配列

   アニメデータが格納された1次元数値配列

  ループ

   ループ回数:(1〜)0で無限ループ

 データ配列

  アニメデータは数値配列に次の順で用意する

   時間1,項目1,[項目2,]時間2,項目1,[項目2,]...

   ・時間n:フレーム数 ※マイナスで前のフレームから線形補間

   ・項目1:変化させる値1(XY座標なら、Xの変化後の値)

   ・項目2:変化させる値2(XY座標、UV座標のように、複数要素を変化させる場合のみ指定)

  ●XY座標を変化させる場合のデータ例

  DIM PANIM[100]

  PANIM[0] = -4 :'4フレーム(マイナスなので線形補間)

  PANIM[1] = 200 :'絶対位置X200

  PANIM[2] = 100 :'絶対位置Y100

  PANIM[3] = -4 :'4フレーム(マイナスなので線形補間)

  PANIM[4] = 50 :'絶対位置X50

  PANIM[5] = 20 :'絶対位置Y20

SPANIM 管理番号,"アニメ対象","@ラベル文字列"[,ループ]

 説明(2/3)

  SPRITEによるアニメ表示(2) DATA命令でアニメデータを指定

 引数

  管理番号

   アニメーションを設定するSPRITEの管理番号:0〜511

  アニメ対象

   変化させる要素を管理する数値または文字列

    XY座標:0または"XY"

    Z座標:1または"Z"

    UV座標:2または"UV" ※定義元の座標

    定義番号:3または"I"

    回転:4または"R"

    倍率XY:5または"S"

    表示色:6または"C"

    変数:7または"V" ※SPRITE変数7の値

   ※対象数値に8を加えるか、文字列の末尾に"+"を付けると、

    値は実行時からの相対値として扱われる

  @ラベル文字列

   アニメデータが格納されたDATA命令の先頭ラベル

   ※@ラベル名を""でくくって文字列として指定(または文字変数)

  ループ

   ループ回数:(1〜)0で無限ループ

 データ配列

  アニメデータはDATA命令に次の順で用意する

   キーフレーム数,時間1,項目1,[項目2,]時間2,項目1,[項目2,]...

   ・キーフレーム数:時間n〜項目2までのデータセット数を指定

    (アニメデータの終わりを知るために必要)

   ・時間n:フレーム数 ※マイナスで前のフレームから線形補間

   ・項目1:変化させる値1(XY座標なら、Xの変化後の値)

   ・項目2:変化させる値2(XY座標、UV座標のように、複数要素を変化させる場合のみ指定)

  ●XY座標を変化させる場合のデータ例

  @MOVDATA

  DATA 2:'キーフレーム数

  DATA -4,200,100 :'4フレームで座標200,100に移動(線形補間)

  DATA -4,50,20 :'4フレームで座標50,20に移動(線形補間)

SPANIM 管理番号,"アニメ対象",時間1,項目1[,項目2][,時間2,項目1[,項目2]]...[,ループ]

 説明(3/3)

  SPRITEによるアニメ表示(3) 直接アニメデータを渡す方法

 引数

  管理番号

   アニメーションを設定するSPRITEの管理番号:0〜511

  アニメ対象

   変化させる要素を管理する数値または文字列

    XY座標:0または"XY"

    Z座標:1または"Z"

    UV座標:2または"UV" ※定義元の座標

    定義番号:3または"I"

    回転:4または"R"

    倍率XY:5または"S"

    表示色:6または"C"

    変数:7または"V" ※SPRITE変数7の値

   ※対象数値に8を加えるか、文字列の末尾に"+"を付けると、

    値は実行時からの相対値として扱われる

  ループ

   ループ回数:(1〜)0で無限ループ

  時間n, 項目1, 項目2

   アニメデータを引数に列挙して渡す

    時間1,項目1,[項目2],時間2,項目1,[項目2,]...

    ・時間n:フレーム数 ※マイナスで前のフレームから線形補間

    ・項目1:変化させる値1(XY座標なら、Xの変化後の値)

    ・項目2:変化させる値2(XY座標、UV座標のように、複数要素を変化させる場合のみ指定)

  ●XY座標を変化させる場合の指定

   SPANIM 0,"XY",-4,200,100,-4,50,20

SPCHR 管理番号,定義番号

 説明(1/2)

  SPRITEのキャラクタ定義を変更(テンプレートより)

 引数

  管理番号

   定義を変更するSPRITEの管理番号:0〜511

  定義番号

   SPDEF命令で登録したテンプレートの番号:0〜4095

SPCHR 管理番号,U,V,[,W,H],アトリビュート

 説明(2/2)

  SPRITEのキャラクタ定義を変更(直接定義)

 引数

  管理番号

   対象のSPRITEの管理番号:0〜511

  U,V

   定義する元画像の座標(U:0〜511、V:0〜511)

  W,H

   定義する元画像サイズ

   ※U+W、V+Hはそれぞれ512以下でなくてはならない

  アトリビュート

   b0:表示(0=OFF、1=ON)

   b1〜b2:回転(0=なし、1=90度、2=180度、3=270度)

   b3:横反転(0=OFF、1=ON)

   b4:縦反転(0=OFF、1=ON)

SPOFS 管理番号,X,Y[,Z]

 説明(1/2)

  SPRITE座標の変更(移動)

 引数

  管理番号

   対象のSPRITEの管理番号:0〜511

  X,Y

   SPRITEを表示する画面座標 Zを指定した場合、X,Yは省略可

  Z

   奥行方向の座標(奥:1024<液晶面:0<手前:-256)X,Yを指定した場合、Zは省略可

SPOFS 管理番号 OUT X,Y[,Z]

 説明(2/2)

  SPRITEの座標を得る

 引数

  管理番号

   対象のSPRITEの管理番号:0〜511

  X,Y

   座標を受け取る変数

  Z

   奥行情報を受け取る変数

SPROT 管理番号,角度

 説明(1/3)

  SPRITEの回転

 引数

  管理番号

   対象のSPRITEの管理番号:0〜511

  角度

   回転角度:0〜360(時計回り)

SPROT 管理番号 OUT 角度

 説明(2/3)

  SPRITEの回転角度を得る

 引数

  管理番号

   対象のSPRITEの管理番号:0〜511

  角度

   現在の角度が返る変数(0〜360)

変数=SPROT(管理番号)

 説明(3/3)

  SPRITEの回転角度を得る(関数タイプ)

 引数

  管理番号

   対象のSPRITEの管理番号:0〜511

  戻り

   現在の角度(0〜360)

SPSCALE 管理番号,倍率X,倍率Y

 説明(1/2)

  SPRITEのスケール(表示倍率)の変更

 引数

  管理番号

   対象のSPRITEの管理番号:0〜511

  倍率X,Y

   X方向・Y方向の倍率を指定

   0.5:50% 1.0:100% 2.0:200%

SPSCALE 管理番号 OUT SX, SY

 説明(2/2)

  SPRITEの表示倍率を得る

 引数

  管理番号

   対象のSPRITEの管理番号:0〜511

  SX,SY

   倍率を受け取る変数


 次回はSPRITE関連の新しい命令を見ていくことにしよう。

※本稿の内容は開発中のものです。製品版配信時には仕様が変更される場合があります。
※日刊プチコン3号は土日祝日は休刊です

 「日刊!プチコン3号」で取り上げて欲しいネタや疑問、質問、感想は、ハッシュタグ「#nikkan_petitcom3」をつけてツイート! ライターの瓜生氏がたぶん(連載の中で)答えてくれるぞ。


Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2026年06月11日 更新
  1. 初のカラー対応「Kindle Scribe Colorsoft」の実力は? 通常モデルとの価格差1万7000円の価値を検証 (2026年06月10日)
  2. 「Geminiの技術は使うが、Geminiではない」 WWDC26で見えたApple流AIとプライバシー戦略の核心 (2026年06月10日)
  3. ミニPCに強みの「MINISFORUM」 ミニワークステーションの新モデルから「謎の拡張カード」まで多彩な製品を披露 (2026年06月10日)
  4. 「macOS 27 Golden Gate」が2026年秋に登場 初のApple Silicon専用バージョンに (2026年06月09日)
  5. 「次世代Apple Intelligence」をフル活用するにはどのような条件がある? 「Siri AI」は日本で使える? 知っておくべき対応モデルのハードル (2026年06月09日)
  6. コンパクトボディーにスパコン並みのAI性能! 「NVIDIA RTX Spark」搭載ミニデスクトップPCを見てきた (2026年06月04日)
  7. 実売1万円切りでパススルー給電にも対応! KTCの15.6型モバイルディスプレイ「H15F9」は“買い”か (2026年06月09日)
  8. LGが4K有機EL TVの2026年モデルを発表 映像プロセッサを刷新し120Hz以上の高速表示にも対応 (2026年06月09日)
  9. 夜間もフルカラーで鮮明に記録できる「SwitchBot 屋外パンチルトカメラ 5MP」が15%オフの7674円に (2026年06月10日)
  10. 高騰中のSSD、品薄のHDD──けれど“最終処分”のニーズは変わらず (2026年06月06日)
最新トピックスPR

過去記事カレンダー