このページはCOOL ONLINE終了に伴いO-Show様の許可を得て作成したBinary Heavenのミラーサイトです
[TOP] [Profile] [NScripter] [BBS] [Links]
初級編 No.6
スプライト
■概要■
知らないと結構はまりがちなスプライト。
メモリ上の仮想画面の概念について解説します。


使用命令:

「lsp」(マニュアル 表示・演奏系 E)
「lsph」(マニュアル 表示・演奏系 E)
「csp」(マニュアル 表示・演奏系 E)
「vsp」(マニュアル 表示・演奏系 E)
「print」(マニュアル 表示・演奏系 E)
スプライトとは

スプライトというのは、背景と立ち絵以外の画像のことです。
正確な定義は違うかも知れませんが、この認識の仕方で大丈夫だと思います。

スプライトは自由な位置に表示させることができ、大きさも自由です。
立ち絵と同様、画像タグの指定を行います。


また、ここでは触れませんが、ボタンにすることもできます。



仮想画面

スプライトを表示するには、「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


同じスプライト番号を指定すると、前のものは破棄されているのでしょう。
■総括■
メモリ上の仮想画面という概念は、知っていると知らないとではだいぶ違うと思います。

次はついに画像の基礎のラスト、アニメーションについてです。

次へ   前へ   NScripterのIndexへ