第7回は「ドラクエ風の大きなマップをつくろう」です。
(背景をつくろうを最初から見る場合はこちら)
RPGで使うような大きなマップを作成して、ファミコン版ドラゴンクエスト(1)のようなスクロールをつくっていきたいと思います。
まず大きなマップデータを作ります。
(今回は2×2画面としました)

次に第6回のプログラムを以下のように調整してください。
15~17行目 キャラクターの設定を変更
35~43行目 スクロール処理を調整

実行結果はこちら(動画です)
任意スクロール処理の解説
とは言っても特に難しいことはしておらず、IF文で方向キーを入れたら画面が移動する(スクロールする)という処理をしています。
前回キャラクターを移動させていたところを背景画面が移動するように変更しているだけで、変更内容としては以下のようになります。
縦方向「CHR_Y」を「Y_SC」に変更
キャラクターは画面中央に置いてあるだけなので、正にファミコン版ドラクエ1状態ですね。
背景の無い所ではスクロールを止める
先程のスクロール処理の場合、背景が無い所でも行けてしまうので、背景のある部分まででスクロールを止めたいと思います。
画面をスクロールさせる方法が根本的に変わりますので、注意しながら調整していってください。
まずはキャラクターの移動と連動して画面がスクロールする形を作ります。
以下のように調整してください。
37~56行目 任意スクロール部分の変更


解説
任意スクロール部分は、まず「方向キーでキャラクターが移動」するように変更します。
(42~45行目)
そしてキャラクターと連動して背景もスクロールするようにするため、ループ中に変数「X_SC2」にキャラクターの座標「CHR_X」を代入する形にします。
しかし、このままだとキャラクターの初期座標(200,120)が(X_SC2,Y_SC2)にそのまま入ってしまうため、(200,120)分だけ背景がずれた位置に表示されてしまいます。
背景の開始地点(スクロールの起点)を(0,0)とするため、キャラクターの初期座標分(200,120)を引いた値を、連動スクロール用の変数「X_SC2」に代入してください。
(48、49行目)
注意点としては、キャラクターの移動と連動している関係上、連動スクロール用の変数はスクロール方向とは正負が逆(右、下に行くほどプラス)になってしまっているという事。
(背景を右、下にスクロールするには、TOFSで表示させる時にマイナスしていく必要がある)
この点は「TOFS」で表示させる際にマイナスで記述して正負を逆にします。
(52行目)
最後にスクロール中はキャラクターを画面中央(200,120)に表示させるため、キャラクターの座標用変数から連動スクロール変数を引いた値を使ってキャラクターを表示します。
(53行目)
実行結果はこちら(動画です)
プログラム内容は大きく変わりましたが、動作的にはただキャラクターを中央に置いてあるのと同じ状態になりました。
マップが無い所ではスクロールを止める処理の追加
続いて、マップが無い所まで来たらスクロールを止める(背景をそれ以上表示させない)ようにしたいと思います。
これは単純にスクロールで表示する範囲の設定をするだけですね。
以下の内容を背景、キャラクターの表示の前に入れてください。

背景を表示する変数「X_SC2」「Y_SC2」が作った範囲以上になったら止めておく(上限値にする)という処理です。
実行結果はこちら(動画です)
マップが無い所ではスクロールが止まるようになりました。
しかし、まだキャラクターは画面外に出てしまうので、折角なのでこちらも調整しましょう。
先程と同様に、以下の内容を背景、キャラクターの表示の前に入れてください。

実行結果はこちら(動画)
しっかり画面端で止まるようになりましたね。
これで背景をつくろうは終了・・・しようかと思っていたのですが、個人的に気になっていたファミコン版ゼルダの伝説のようなスクロールをつくる方法も紹介します。
第7回は以上になります。
背景を作ろうのトップに戻る場合はこちら

コメント