2Dゼルダ風マップスクロールの仕組みについて知りたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たかお

2Dゼルダ風マップスクロールの仕組みについて知りたい

#1

投稿記事 by たかお » 11年前

はじめまして。たかおと申します。よろしくお願いします。

C言語とDXライブラリを使って、2Dゼルダ(神々のトライフォース)のようなアクションRPGを製作しています。
そこで、マップの区間移動をゼルダ風にしたいと考えているのですが、その方法について疑問があるので質問させていただきます。

2Dゼルダはマップを遷移する際(階層移動や、フィールドから建物に入るとき)は暗転しますが、同じマップの別エリアに移動する際は暗転せず、プレイヤーの操作が停止したのち、別のエリアにスクロールします。
□ = 画面端
● = プレイヤー

エリア1             エリア2
□□□□□□□□□□□□□□ □□□□□□□□□□□□□□
□           □ → □           □
□           □ → □           □
□         ● □ → □●          □
□           □ → □           □
□           □ → □           □
□□□□□□□□□□□□□□ □□□□□□□□□□□□□□

このようにプレイヤーが画面端に接触した際、プレイヤーの動きが止まり、マップがエリア1の右端から、エリア2の左端にスクロールします。

素人考えでは、最初からマップ全体を読み込めばいいのではと思うのですが、マップを分割したほうが、効率的なのでしょうか。
それとも、マップ自体は読み込んであって、エリアごとに敵やアイテム等のイベントを読み込んでいるんでしょうか。

実際ゼルダがどのようにしているのかはソースを見ない限りわからないので、このような手法を行なうメリットを教えて欲しいです。

たかお

Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい

#2

投稿記事 by たかお » 11年前

すみませんレイアウトが崩れてますね
・・ゼルダ風マップスクロール

画面右端に接触すると
□      ●□
□□□□□□□□□□

↓ ↓ ↓ ↓ ↓

□●      □
□□□□□□□□□□

同じマップの次エリアの画面左端にマップがスクロールする。
その間プレイヤーは停止しているので、何らかのロードが行なわれていると推測。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい

#3

投稿記事 by softya(ソフト屋) » 11年前

部屋に入らないと何が起きるか分からないというゲーム性と、初代はファミコン・ディスクシステムからのメモリ展開の都合かなと。
想像ですが、圧縮してあってディスクシステムのディスクからディスクシステムのメモリにロードしたまま置かれているんだと思います。
部屋に入る時にディスクシステムのメモリ→ファミコンのメモリと圧縮展開されるんではないかと。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たかお

Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい

#4

投稿記事 by たかお » 11年前

なるほど。ということは現在のPCスペックならば
わざわざ分割する必要はないですね。

迅速で丁寧な回答をありがとうございました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい

#5

投稿記事 by softya(ソフト屋) » 11年前

既に書いていますが、ゲーム性には大いに意味がありますよ。
ゼルダは伝統的に、先の部屋の中は見せない演出を貫いています。これは3Dのゲームでも代わりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい

#6

投稿記事 by ISLe » 11年前

もともとはファミコンのBG専用ビデオメモリの存在がアルゴリズムを決めたと思います。

タイルを書き変えてマップを変化させる演出に対応するため、いまでも仮想のBG専用ビデオメモリを実装することはよくあります。
むしろスクロールする場合マップデータはコピーして使うのが原則で、そのまま画面表示に対応させることはあまりありません。

元のマップデータが分割されているかどうかとは別のことです。
逆に言えば、元のマップデータを分割しようがしまいが関係ないので仕様変更に強いということです。
単純にマップデータのサイズを大きくするだけでは仕様変更に弱くなります。

たかお

Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい

#7

投稿記事 by たかお » 11年前

softya(ソフト屋) さんが書きました:既に書いていますが、ゲーム性には大いに意味がありますよ。
ゼルダは伝統的に、先の部屋の中は見せない演出を貫いています。これは3Dのゲームでも代わりません。
確かにそうですね。壁の向こう側が見えるのは不自然ですし、演出の一つとして今でも活用できますね。
ISLe さんが書きました: タイルを書き変えてマップを変化させる演出に対応するため、いまでも仮想のBG専用ビデオメモリを実装することはよくあります。
むしろスクロールする場合マップデータはコピーして使うのが原則で、そのまま画面表示に対応させることはあまりありません。

元のマップデータが分割されているかどうかとは別のことです。
逆に言えば、元のマップデータを分割しようがしまいが関係ないので仕様変更に強いということです。
単純にマップデータのサイズを大きくするだけでは仕様変更に弱くなります。
おっしゃる意味がよくわかりません。ゼルダはマップデータを分割しているのではなく、
現在使用しているマップデータに次のエリアのマップデータを上書きしているということでしょうか?

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい

#8

投稿記事 by ISLe » 11年前

たかお さんが書きました:おっしゃる意味がよくわかりません。ゼルダはマップデータを分割しているのではなく、
現在使用しているマップデータに次のエリアのマップデータを上書きしているということでしょうか?
ゼルダであればそもそも静的なマップデータをベタな形で持っていることはないはずです。
別に用意した作業用や表示用の領域を適切なタイミングで上書きします。

たかお

Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい

#9

投稿記事 by たかお » 11年前

バックグラウンドの領域にマップチップを書き込んで、それをゲーム画面に既存の画像の上から表示する感じですかね。
ゲームプログラミングにおける画像の取り扱いについて自分なりに勉強してみます。
回答ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る