スプライトの登録

es_sizeとes_patで登録したキャラクターは、es_setで登録することで初めてスプライトとしての機能を果たします。一旦es_setで登録したスプライトは、自分で削除(es_killまたはes_clear)するか、移動してスプライト有効範囲(es_areaで設定)をはみ出すまで有効となります。それゆえes_setはキャラの生成時のみに使用し、後は他の命令で制御する形になります。毎フレームes_setで登録しなおす必要は全く無いので注意しましょう。



;■ スタート前準備
;〜中略〜
	es_window 0,0,640,480	;スプライト描写範囲設定
	es_area -50,-50,640,480	;スプライト有効範囲設定
	es_cls			;一旦画面消去
	es_sync			;消去した画面の描写
	wait 100			;最初だけ若干ウェイトをかまします
	es_set 300,295,300,5	;自機スプライト登録
	es_type 300,1		;自機Type値設定(1)

;■ メインルーチン
*main
	es_cls 0,0,0		;画面クリア
;〜中略〜・・・もろもろの処理
	es_draw			;スプライト描写
;〜中略〜・・・スプライトより手前に描写したいものがある場合はここで処理
	await 0
	es_sync 32			;画面描写とウェイト
goto *main

メインルーチンに入る前に、スプライトを描写する範囲と有効範囲を設定しておきます。これらは一度設定すれば以後はずっと有効になるため、前準備(メインルーチンなど永久ループに入る前)の段階で一度やれば二度とやる必要がありません。もちろんゲーム中に変更する必要がある場合は別ですが^^;

まずes_windowでスプライトを描写する範囲を決めます。例えば縦スクロールシューティングなどで、画面の縦横比を変えたい場合はここで設定します。あくまでこれはスプライトの描写範囲の設定なので、es_copyなどを使えばこの範囲の外側にも描写はできます。例えばステータスウィンドウ(得点とかシールド残量などを表示)のように、そこにスプライトが描写されると困るような範囲がある場合は使うといいでしょう。画面いっぱいに描写してもかまわないのであれば、設定する必要はありません。

次にes_areaでスプライトの有効範囲を決めます。これも前準備の段階で一度行えばオッケーです。es_windowを行うと、その範囲+上下左右128ピクセルが自動的にスプライトの有効範囲に設定されます。なので、スプライト有効範囲を変更したい場合は必ずes_windowの後に行いましょう。このes_areaで指定された範囲から外にスプライトがはみ出すと、そのスプライトは自動的に削除されます。スプライトの座標はその画像の左上になるので、見かけ上不合理が生じないようにするには上記スクリプトのように、スプライト有効範囲を画面上側と左側に若干大きめにとる必要があります。下図を参考にしてみて下さい。

es_windowとes_areaの関係

シューティングゲームで言う自機のように最初から画面に現れてるキャラクターをスプライト登録する場合は、上記のスクリプトのようにメインルーチンに入る前に設置を行います。es_typeに関しては、当たり判定の部分で説明するのでここでは割愛させていただきます。

スプライトの重ね合わせはスプライト番号によって決まります。番号が若い方が手前に表示されるのです。例えばシューティングゲームで言うと、敵の弾が爆風などの後ろで描写されてると隠れて見えず、非常にプレイヤーにストレスがかかります(そういうゲーム性だったらいいでしょうけど^^;)。なので、敵の弾は必ず自機のストライプ番号より少ない番号を選ぶようにしなければなりません。重ね合わせの優先順位があるのならば、使用するスプライト番号の範囲を自分で決めておきましょう。例えばこんな感じです。
  1. 敵弾・・・0-500の範囲
  2. 自機・・・501
  3. 自機弾・・・502-510
  4. 爆風・・・511-550
  5. 敵機・・・551-650
スプライトの登録の際はこの優先順位がポイントとなります。自分の作るゲーム性に合わせていろいろ考えてみましょう。es_iniで初期化を行う際に、かなり多めにスプライト数を設定しておいて、使う範囲をわかりやすい番号で区切っておくというのも一つの手です。そうすれば、作ってる最中で最大数などを変更したい場合にラクです。

そして、メインルーチン(永久ループになる部分)では、es_syncより前にes_drawを行い、スプライトの描写をしましょう。これを忘れてるとスプライトだけが表示されないので「?」ってなことになります(私はサンプルv3.0を作ってる時にやらかしました^^;)。スプライトより手前に描写したいものがある場合は、es_drawとes_syncの間で処理しましょう。例えばメッセージとか数字とか。そういった、スプライトに隠れては困るものはes_syncの直前に描写処理を行えばいいのです。

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