■スプライトとは
スプライトというのは、
背景と立ち絵以外の画像のことです。
正確な定義は違うかも知れませんが、この認識の仕方で大丈夫だと思います。
スプライトは自由な位置に表示させることができ、大きさも自由です。
立ち絵と同様、画像タグの指定を行います。
また、ここでは触れませんが、
ボタンにすることもできます。
■仮想画面
スプライトを表示するには、
「lsp」か
「lsph」という命令を使って表示しますが、ただこの命令を書いただけでは表示されません。さらに、
「lspは表示モード、lsphは非表示モード」とあります。
これはどういうことでしょうか?
これを理解するには、
メモリ上の仮想画面という概念が必要になってきます。
画像が表示される際、まずハードディスクやCD-ROMからメモリの中の仮想的な画面にデータがコピーされます。
これで見えない仮想的な画面に、どういう画像がどこに表示されているかという絵ができあがります。
そこから、実際に表示されるべきゲーム画面(のメモリ)へとデータがコピーされ、私達が見ることができるようになります。
なぜこのようなことをしなければいけないかと言うと、速度を確保するためです。
何度も画面を書きかえなければいけない場合、いちいち画像データをハードディスクやCD-ROMから読みこんでいては遅いのです。
一度メモリに読みこんでしまい、画面を書きかえる度にメモリからメモリへコピーする方が速くなります。
■lspによる表示
ということで、まず「lsp」から見てみましょう。
この命令は、スプライトとして表示する画像ファイル名、表示する位置を記述しますが、実際に画面に表示することはありません。
つまり、ハードディスクやCD-ROMからメモリへとコピーし、仮想的な画面を定義しているだけということになります。
lsp 8,"supuraito.bmp",50,100
|
「lsp」の隣の「8」は、
スプライト番号と呼ばれるものです。
スプライトを操作する命令を使う時、どのスプライトかわかるように付けるのが、スプライト番号です。
スプライト番号には、0番から255番まで付けることができます。
全部で256個のスプライトを同時に表示できることになりますね。
(マニュアルには49番までと書かれていますが、これは古い記述です)
「"supuraito.bmp"」はファイル名ですが、その右にある「50」と「100」の数字はそのスプライトを表示する位置です。スプライトの一番左上が、その位置に来るということです。
NScripterで位置を指定する時は必ず、一番左上を(0,0)とする座標で指定することになります。
ここでは「50」がX、「100」がYとなるので、NScripterの画面の一番左上から右へ50ピクセル、下へ100ピクセル行ったところが、そのスプライトの一番左上ということになります。
このままではスプライトを見ることができないので、
「print」命令によって実際の画面に描画します。
lsp 8,"supuraito.bmp",50,100
print 10
|
「print」の隣の数字は、エフェクト番号です。
これで、仮想画面から実際の画面へと画像がコピーされました。
■lsphによる表示
では、「lsph」ではどうでしょう。
「lsph」は、「lsp」と指定するパラメーターは同じです。
しかし、上のように「print」命令で描画しようとしても、実際の画面に表示されることはありません。
これを表示するには、
「vsp」という命令を使います。
lsph 8,"supuraito.bmp",50,100
vsp 8,1
print 10
|
「vsp」の隣の「8」はスプライト番号です。
そして、その隣の「1」は、表示・非表示を切りかえるための数字です。
「0」を指定すると表示から非表示へ、「1」を指定すると非表示から表示状態になります。
この場合、「lsph」で非表示状態で読みこまれているスプライト8番が、「vsp」によって表示状態へと変わり、そして「print」命令によって実際の画面へと描画されることになります。
■lsphの必要性
上の例では、「lsp」を使って表示したのとたいして変わりません。
ではなぜ非表示状態で読みこむということが必要なのでしょうか?
では、複数のスプライトを表示させたり見えなくさせたりしなければいけない場合を考えてみましょう。
スプライトの7番と8番と9番を使います。
そして、7番のみ表示、8番のみ表示、7番と9番のみ表示と、三つの場面を順番に作っていきます。
lsp 7,"supuraito.bmp",50,100
print 10
vsp 7,0
lsp 8,"supuraito.bmp",50,200
print 10
vsp 8,0
vsp 7,1
lsp 9,"supuraito.bmp",50,300
print 10
|
ちょっと、わかりにくいですね(書き方にもよりますが…(汗))。
では、「lsph」を使って同じ事をやってみます。
lsph 7,"supuraito.bmp",50,100
lsph 8,"supuraito.bmp",50,200
lsph 9,"supuraito.bmp",50,300
vsp 7,1
print 10
vsp 7,0
vsp 8,1
print 10
vsp 8,0
vsp 7,1
vsp 9,1
print 10
|
「lsp」のみよりも、見やすい感じがすると思います。
そしてそれよりも大事なのは、「gosub」などでサブルーチンを組んだ時、このような書き方が重要になってくることです。
今はわからないかも知れませんが、そういうことだと、頭の隅にでも置いておいてください。
ただ、すぐに表示したい場合は「lsp」でもかまいません。
■スプライトの消去
スプライトを消去(非表示ではなく、メモリの仮想画面から消してしまう)するには、
「csp」という命令を使います。
lsp 8,"supuraito.bmp",50,100
print 10
csp 8
print 10
|
「csp」の右の「8」は、スプライト番号です。
消去したいスプライト番号を指定してください。
また、「-1」を指定することで、全てのスプライトを消去することができます。
消去した結果を実際の画面に反映させたければ、やはり「print」命令によって書きなおしてください。
■注意点
メモリの容量というのは、有限です。
「lsp」や「lsph」でたくさんの画像を読みこむと、動作が遅くなってしまいます。
ということで、使わなくなったスプライトは必ず「csp」命令で消去しておきましょう。
ですが、こういう場合は一枚づつしかメモリに保持されていないようです。
lsp 8,"supuraito.bmp",50,100
print 10
lsp 8,"gazou.bmp",50,200
print 10
lsp 8,"aikon.bmp",50,300
print 10
lsp 8,"botan.bmp",100,100
print 10
|
同じスプライト番号を指定すると、前のものは破棄されているのでしょう。