“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

204.HSPでゲームを作ろう:標準スプライトのマップ表示を使ってアクションゲームを作る その2

続いて、マップの定義と表示のおさらい。

マップは、普通にデータ構造を考えると、縦×横の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命令を書けば、マップが表示される。