スプライトとは

ゲーム機などで利用される技術で、定型サイズの平面グラフィックを表示する機能や処理を呼びます
メーカーによっては異なる呼び方をされますが、このライブラリではスプライトと呼ぶことにしています

スプライトの定義

1ドットx1ドットからnドットxnドットまでの長方形の元絵をディスプレイに複写する機能です
ディスプレイの表示位置・表示範囲・エフェクト・変形の指定が可能です

スプライトのデータ形式

ピクセルのデータを縦x横のドット数だけ並べまています
1ピクセルは1バイトで構成されます
ピクセルのデータは0で透過色で、1が白、2が薄い白、3が薄い黒。4が黒になります

スプライトのデータイメージ

4x4ドットの画像データのデータの並びはこのようになります

左上から右下へ(P/ECEも同じ)
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

参考までにBMPファイルのデータの並びはこのようになっています

左下から右上へ
13 14 15 16
9 10 11 12
5 6 7 8
1 2 3 4

これをデータコンバータで変換して使用します

スプライトの製作手順例

まずBMP形式の画像を用意します

ここではEDGEというフリーソフトを使った例です(作者サイトがリンク切れ中)
256色のBMPを指定して描きます
またパレットは1〜4を白〜黒のグラデーションになるように設定します
0番パレットは透過色なので、目立つように適当な色を設定します

また同じサイズのデータを複数まとめる時は縦に並べます

保存したデータをコンバータに通してC言語スタイルに変換します

コンバータのダウンロード

コマンドラインアプリなのでDOS窓やコマンドプロンプトを開いて処理します
同じフォルダ(ディレクトリ)にコンバータ(bmp2pce.exe.)とBMPファイル(ここでは nekoaya1.bmp)を置いた状態で

> bmp2pce nekoaya1

のように打ち込みます
コンバータもBMPファイルも拡張子は記述しません

成功すると同じフォルダに nekoaya1.h というファイルが作成されます

スプライトデータテーブルを作成します

・スプライトソースを記述してスクリプトで自動生成します(推奨)

プログラムソースを格納しているフォルダに spsrc というファイルを作ります

fixgrph,4,8,0,0,16,FIX20,FIX記号
fixnums,4,8,0,0,16,FIXNUM,FIXの数字
fixalphb,4,8,0,0,32,FIXAB,FIXのアルファベット大文字
fixalphl,4,8,0,0,32,FIXAL,FIXのアルファベット小文字
nekoaya1,59,82,29,85,1,TITLEH,セーラー

最初の4行はデバッグ時などで利用する文字なので、現時点ではこのままコピーします
5行目からがユーザー定義のスプライトになります
「,」(カンマ)で区切ってパラメータを記述します
先頭から「ファイル名」・「横幅」・「高さ」・「Xのオフセット」・「Yのオフセット」・「画像数」・「C言語での参照名」・「注釈」です

ファイル名は、拡張子無しのファイル名を記述します
「横幅」と「高さ」は画像のサイズを記述します、複数の画像を格納した時は1つのサイズを記述します
「オフセット」は表示するときの中心の事です、0をしてした時は画像の左上が中央になります
アクションゲームなどの場合はキャラクターの中心や足元の位置にすると都合が良いでしょう
「画像数」は同じサイズの画像を何枚格納しているかと言う事です、1以上の指定になります
「C言語での参照名」は実際にプログラム中で使用する時に使う名前を指定します
プログラム中では「SN」+「参照名」となるので、nekoaya1は SNTITLEH と言う名前で利用します
「注釈」はプログラムには影響ありませんが、出力ファイルの該当個所にそのままコピーされます
デバッグなどのためにも判りやすく簡潔なコメントを入れるのをお勧めします

スクリプトを用意して、C言語用のスプライトファイルを作成します

スクリプトダウンロード

JPERLのサイト

JPERLが実行出来る環境になりましたら、スクリプトを起動します

> jperl mksp

問題が無ければ、「sprdat.c」・「sprdef」・「spinfo」の3つのファイルが作成出来ています

・スプライトのソースファイルを手動生成します(お奨めしません)

プログラムソースを格納するフォルダに、sprdat.c ファイルを作成します
(別の名前に変えた場合は、今後の説明を自分で置き換えて読んで下さい)

#include "gml_g.h"
//データ参照テーブル
SPRTBL D2_SpriteAttribute[] = {
// FIX記号
{0,4,8,0,0,},
{32,4,8,0,0,},
{64,4,8,0,0,},
{96,4,8,0,0,},
{128,4,8,0,0,},
{160,4,8,0,0,},
{192,4,8,0,0,},
{224,4,8,0,0,},
{256,4,8,0,0,},
{288,4,8,0,0,},
{320,4,8,0,0,},
{352,4,8,0,0,},
{384,4,8,0,0,},
{416,4,8,0,0,},
{448,4,8,0,0,},
{480,4,8,0,0,},
};
// スプライト実データ
unsigned char D2_SpriteData[] = {
#include ".\spr\fixgrph.h" //FIX記号
};

データ参照テーブルはスプライトデータテーブルへの参照用情報を記述します
先頭から「データインデックス」・「Xサイズ」・「Yサイズ」・「Xオフセット」・「Yオフセット」です
「データインデックス」は、スプライト画像の実データアドレスの「SprTblEx」からのアドレス補正値です
スプライトデータ自体は何の区切りもないデータが連続して存在しているので、対象のスプライト画像がある場所を特定する必要があります
このインデックスはそのアドレスポインタをしめすためにあります
算出方法は、前回のデータインデックス+前回の画像XサイズかけるYサイズです

スプライト実データは、スプライトとして使用するデータ本体の格納位置です
インデックスで記述した順番に沿ってインクルードします
サイズが小さい時などは、直接取り込んでも構わないと思います

スプライトデータを構築します

プログラムソースを格納するフォルダにサブフォルダ「spr」を作り、コンバート済みの必要なスプライトデータを格納します
※手動でスプライトソースファイルを記述、またはスクリプトを修正するなどした場合、変更場所に置き換えて読んで下さい

後はGMLの通常の手順でコンパイルします

> pcc33 メインプログラム.c gml_g.o sprdat.c

 

TOPに戻る

このページのコンテンツの著作権は放棄しません
またここのコンテンツを使用してのいかなる損害も保障いたしません
基本的にフリーソフト扱いですが、サポートやパッケージなどの要望がありましたらご連絡下さい