第8回は「ゼルダ風のスクロールをつくろう」です。
(背景をつくろうを最初から見る場合はこちら)
ファミコン版ゼルダの伝説のようなスクロールをつくっていきたいと思います。
今の人にはあまり馴染みが無いかもしれませんが、キャラクターが画面の端に来たら1画面分スクロールする形の動作になります。
※プログラムが大幅に変更になりますの必要に応じて別のファイルに保存して下さい
まずは右端にキャラクターが行った時の処理を作りましょう
第7回から以下のように調整してください。
49~59行目 画面端スクロール処理(右)を追加
61~63行目 背景、キャラクターの表示を調整

実行結果はこちら(動画です)
画面端スクロール処理(右)の解説
まず50行目のIF文の条件として、1画面の横サイズが0~399のため「400よりも大きくなったら」としています。
この条件を満たした場合、FORのループで背景とキャラクターをSCSPEED分だけ移動させます。
(52、53行目)
SCSPEED分ずつ(8ドットずつ)スクロールした場合、1画面分(400ドット分)移動するには、FORを50回(400/8)ループさせる必要あります。
これをまとめると、FORの式は以下のようになります。
そしてスクロールしている最中(FORのループ中)も背景とキャラクターを表示するため、「TOFS」「SPOFS」「VSYNC」もFORの中に入れる必要があります。
(55、56行目)
表示部分をサブルーチン化しよう
ここで勘の良い方はお気づきかもしれませんが、背景とキャラクターの表示部分が全く同じ処理になっています。
(55~57行目と62~64行目)
そしてこの背景とキャラクターの表示は右以外の3方向でも使います。
という事で、サブルーチン化してしまいましょう。
(サブルーチンのついてはこちら)
54、59行目 サブルーチンの呼び出し

メインループのVSYNCをサブルーチンの中に入れてしまうとプログラム的に少々わかりづらくなってしまうかもしれませんが、今回はとりあえずこの形でいきます。
続いて残り3方向も作ってしまいましょう。

画面サイズと方向に注意してください。
実行結果はこちら(動画です)
基本的な動きはできましたが「スクロールが始まる時のキャラクターの位置」「スクロールが終わった後のキャラクターの位置」が気になりますね。
という事で調整していきましょう。
(キャラクターの座標基準点を設定しても良いのですが今回は座標で調整します)

「画面端でスクロールが始まる時のキャラクターの位置」の調整
こちらは「IF文」の条件を調整します。
(50、60、70、80行目)
条件の数値が増えるところは以上(>=)、減る所は以下(<=)に変更します。
あわせてキャラクターの中心くらいからスクロールするように、それぞれの値から「-8」します。
「スクロールが終わった後のキャラクターの位置」の調整
こちらはスクロールが終わった後に座標を調整します。
(56、66、76、86行目)
それぞれの方向にあわせて「8」だけ増減させてください。
実行結果はこちら(動画です)
キャラクターの位置も含め、綺麗にスクロールするようになりました。
THOME で開始するマップ位置(ホーム座標)の設定
今回、2×2サイズのマップ(0,0)~(799,479)を作成してスクロールさせていました。
その際、必ず左上のマップから開始していましたが「THOME」という命令で開始する画面(位置)を指定することができます。
例えば右下の画面から始めたい場合は、メインループの前に以下のように記述することで指定した位置をホーム座標(座標基準点)として開始することができます。

実行結果はこちら(動画です)
木で4と書かれた右下の画面(テキストスクリーンの(400,240)から始まる1画面)から開始することができました。
これを使う事でRPGで広いマップを作っても、好きな位置から開始することができます。
以上で背景をつくろうは終了となります。
この記事を見ていただいた方の作りたいゲームに利用できれば幸いです。
ご覧いただきありがとうございました。
背景を作ろうのトップに戻る場合はこちら

コメント