続いて、マップの定義と表示のおさらい。
マップは、普通にデータ構造を考えると、縦×横の2次元配列で作るのだが、標準スプライトのマップは、縦×横のチップ数だけ要素数を持つ、1次元配列を使う。
mapsx=20:mapsy=20 ; マップサイズ dim map,mapsx*mapsy ; マップデータ変数
こんな感じで、縦と横のチップ数を変数にしておくと、あとで変更が楽になる。
チップのグラフィックは、celloadで読み込んで、celdivで1つのチップのサイズを設定する。
画像もサンプルプログラムのものを、とりあえずそのまま利用。
es_bgmap命令で、マップの広さと、表示範囲などを定義し、es_bgattr命令で、マップチップに属性(アトリビュート)を設定する。
この属性を設定することで、背景と通り抜けられない壁を判別してもらえるようになる。
さらに、スプライトとBG当たり判定を有効にすると、例えば、通り抜けられない壁の方に移動させようとしても移動しなくなる。
ざっくりこんな感じ。
celload "pic/parts.bmp",2 celdiv 2,40,40 ; マップのセル設定 es_bgmap 0,map,mapsx,mapsy,mapsx,20,2 ; マップ登録 es_bgattr 0, 6,8, ESMAP_ATTR_HOLD ; アトリビュート値を設定 es_bgattr 0, 9,11, ESMAP_ATTR_WALL ; アトリビュート値を設定 es_bglink 0, ESSPMAPHIT_BGHIT ; スプライトのBG当たり判定を有効にする
最後にマップの配列変数それぞれに、チップNoをセットしていく。
そして、スプライトの表示と同じように、redraw 0~redraw 1の間に、es_putbg命令を書けば、マップが表示される。