スプライトを使う準備

それではいよいよ後半部分の解説に入ります。hspdx.dllのスプライト機能です。

まず最初に、スプライトの機能を使うと何ができるのか?という事を整理しておきましょう。単純に描写速度を速くする目的のみでDirectXを用いるのであれば、ここまでの講座内容だけで充分です。新出の命令の半分も使ってないですしね。覚えることも少なくて済みます。

しかし、スプライトの機能を使うことで、次のようなことが容易になります。
  • 当たり判定をDirectXの機能を使ってできる・・・アルゴリズムが簡単になる
  • キャラクタの管理ができる・・・新規のキャラクタ登録や削除が容易になる
  • 移動の制御ができる・・・例えば「弾を発射する」といったアルゴリズムが簡単になる
  • アニメーションができる・・・視覚効果を派手にするのが容易になる
  • 方角が調べられる・・・(※hspdxfix.dllのみ・・・スプライトじゃなくてもできます)
もうシューティングゲームを作ってください!と言ってるのも同然の機能ですね。標準命令では苦労してた事が、スプライトを使うことによって非常にラクになります。「プログラミングの醍醐味はアルゴリズムだ!」という声も聞こえてきそうですが、私はできることならラクしたいです。ただし、厳密なこと(ex.正確な角度を求める)をやろうとするとどうしても無理はでてくるので、そういう場合はdllを複数使うなりして対処しましょう。

さて、スプライトを使う場合最初にやらなければいけないのはキャラクタの登録です。使用する画像の大きさ当たり判定の範囲アニメーションのパターンなどは最初に設定しておきます。


;■ バッファへ画像の読みこみ
	buffer 2,640,480,1
	pos 0,0
	picload "sampledx.bmp",1
	es_buffer 0,0
	if stat=1 : goto *dxerr3
				;オフスクリーンバッファへの転送と成否判定

	es_size 50,50,80,0
	repeat 11 : es_pat cnt,50*cnt,0 : loop
				;キャラクタ1・・・0-10

	es_size 40,40,60,0
	repeat 8 : es_pat 11+cnt,40*cnt,50,1 : loop
	es_link 18,11
				;キャラクタ2・・・11-18

まずes_sizeで切り抜いてくる画像の大きさと、当たり判定の大きさを決めます。例えば50x50の大きさのキャラクタで、当たり判定の範囲は40x40にしたいのなら、第3パラメータに80(%)を指定します。当たり判定の範囲は下図のようになります。

キャラクタ1の場合この図のように、中心から80%の範囲が当たり判定の範囲になります

スプライトを使う際に透過しない設定にすることはまずありえないので、第4パラメータには0を入れることになります。

そして次に、切り抜いてくる場所をes_patで指定します。第1パラメータがキャラクタ番号になります。es_sizeが同じ設定の画像を連続で切り抜いてくるのなら、上記のスクリプトのようにrepeat〜loopで一気に指定するとラクです。そうする為にも、最初にbufferへ読み込む画像は下図のようにつなげておくと便利です。

自機のロール画像です。このように使う順番で保存しておくと後がラクです

次に、自動でアニメーションさせる画像の場合の設定です。上記のスクリプトの場合、キャラクタ2は自動的にアニメーションさせるキャラクタです。このようにes_patの第4パラメータにアニメーションする早さを指定しておきます。これはes_syncで何回画面描写したら次のコマへ移るか?という指定になりますので、数を多くするとコマ送りのようにになってしまいます。30FPSくらいの描写速度だと、2フレームに1回くらいならあまり不自然にはなりません。

連続したアニメーションの場合、es_linkでキャラクタ番号の何番から何番をつなげるかを指定します。アニメーションを途中で止める場合(設置直後はアニメーションするが、最後のコマでアニメーションしなくなる)は、最後のコマのes_patの第4パラメータに0を指定します。0指定がなかったりes_linkでつなげるのを忘れると笑える現象が起こりますので注意しましょう。全然違うキャラでアニメしてくれます^^;

毎回描写 ウェイトかけ過ぎ es_linkの番号間違い
ウェイト1だとこのくらい コマ送り状態 番号を間違えた

キャラクタの登録で最大のポイントになるのは、数が多くなると何番がどのキャラかわからなくなるということです。笑い事のようですが、真実です。上記のスクリプトのように、必ずコメントに「このキャラは何番から何番のキャラクタ番号」というのを書くことをお勧めします。私はこれで泣きました。キャラが多すぎて書いてても泣きました(笑)。

前へ戻る 改造記メニューへ戻る 次へ進む