“RUN” それは魔法の言葉

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

166.HSPでゲームを作ろう:技術研究 標準スプライトのマップ表示を使ってみる 3.7β5編 その2

次は、プレイヤーの移動。ここで下準備していたマップの属性が活きる!…はずだったが、一筋縄では行かなかった。

まずプレイヤーはXY座標で位置を管理して、es_pos命令で直接座標指定して表示していた。
しかし、これでは、マップとの自動判定が行われないのだ…

移動時のマップとの判定を自動で行うには、es_apos命令で移動させなくてはならなかった。
es_aposは、移動量を指定してスプライトを動かす命令。なので、カーソルキーの入力に対して、XY方向の増分量を指定する。
すでに画面上のスプライトのXY座標を管理、移動するように作成していたロジックは、すべて書き換える羽目に…でも、範囲の判定が不要なので、シンプルにすることができた。
これで、es_aposで移動させた先に属性を持つマップチップがあると、判定ができるようになる。

壁のチップを侵入禁止属性に設定したので、移動する先に壁があると、移動しない。
es_getbghit命令で、何にヒットしたのか当たり判定の結果も取得できる。
いちいち座標とマップの状態を判定しなくてよいのは凄く楽♪
更に、属性として通知アイテムやイベントアイテムとして属性定義したらそれらの判定が自動で行われる。
例えばRPGでフィールドを移動中に街に入るようなことができる(はずw)。
現時点では、壁との当たり判定が自動で行え、移動できないようになればよいので、ここまで。

次はマップのスクロール。
マップをスクロールさせるのは、3.6のときと同じ。es_putbg命令で、オフセットする座標を指定するだけ。
しかし、前回と違い、今回はプレイヤーのXY座標で移動せず、es_aposで、相対座標で移動させている。なので、スプライトのXY座標を別に管理するのは面倒。

そこで、es_getpos命令を使って、実際に移動した先のスプライトのXY座標を取得して、マップ内のどの部分に表示されているかを座標に変換して判定、マップの移動量を決めることにした。
ちょっと面倒だったが、マップの隅から隅までスクロールさせつつ移動できるようになった

それが、これ。

結構形になってきた。