はじめまして。たかおと申します。よろしくお願いします。
C言語とDXライブラリを使って、2Dゼルダ(神々のトライフォース)のようなアクションRPGを製作しています。
そこで、マップの区間移動をゼルダ風にしたいと考えているのですが、その方法について疑問があるので質問させていただきます。
2Dゼルダはマップを遷移する際(階層移動や、フィールドから建物に入るとき)は暗転しますが、同じマップの別エリアに移動する際は暗転せず、プレイヤーの操作が停止したのち、別のエリアにスクロールします。
□ = 画面端
● = プレイヤー
エリア1 エリア2
□□□□□□□□□□□□□□ □□□□□□□□□□□□□□
□ □ → □ □
□ □ → □ □
□ ● □ → □● □
□ □ → □ □
□ □ → □ □
□□□□□□□□□□□□□□ □□□□□□□□□□□□□□
このようにプレイヤーが画面端に接触した際、プレイヤーの動きが止まり、マップがエリア1の右端から、エリア2の左端にスクロールします。
素人考えでは、最初からマップ全体を読み込めばいいのではと思うのですが、マップを分割したほうが、効率的なのでしょうか。
それとも、マップ自体は読み込んであって、エリアごとに敵やアイテム等のイベントを読み込んでいるんでしょうか。
実際ゼルダがどのようにしているのかはソースを見ない限りわからないので、このような手法を行なうメリットを教えて欲しいです。
2Dゼルダ風マップスクロールの仕組みについて知りたい
Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい
すみませんレイアウトが崩れてますね
・・ゼルダ風マップスクロール
画面右端に接触すると
□ ●□
□□□□□□□□□□
↓ ↓ ↓ ↓ ↓
□● □
□□□□□□□□□□
同じマップの次エリアの画面左端にマップがスクロールする。
その間プレイヤーは停止しているので、何らかのロードが行なわれていると推測。
・・ゼルダ風マップスクロール
画面右端に接触すると
□ ●□
□□□□□□□□□□
↓ ↓ ↓ ↓ ↓
□● □
□□□□□□□□□□
同じマップの次エリアの画面左端にマップがスクロールする。
その間プレイヤーは停止しているので、何らかのロードが行なわれていると推測。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい
部屋に入らないと何が起きるか分からないというゲーム性と、初代はファミコン・ディスクシステムからのメモリ展開の都合かなと。
想像ですが、圧縮してあってディスクシステムのディスクからディスクシステムのメモリにロードしたまま置かれているんだと思います。
部屋に入る時にディスクシステムのメモリ→ファミコンのメモリと圧縮展開されるんではないかと。
想像ですが、圧縮してあってディスクシステムのディスクからディスクシステムのメモリにロードしたまま置かれているんだと思います。
部屋に入る時にディスクシステムのメモリ→ファミコンのメモリと圧縮展開されるんではないかと。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい
なるほど。ということは現在のPCスペックならば
わざわざ分割する必要はないですね。
迅速で丁寧な回答をありがとうございました。
わざわざ分割する必要はないですね。
迅速で丁寧な回答をありがとうございました。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい
既に書いていますが、ゲーム性には大いに意味がありますよ。
ゼルダは伝統的に、先の部屋の中は見せない演出を貫いています。これは3Dのゲームでも代わりません。
ゼルダは伝統的に、先の部屋の中は見せない演出を貫いています。これは3Dのゲームでも代わりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい
もともとはファミコンのBG専用ビデオメモリの存在がアルゴリズムを決めたと思います。
タイルを書き変えてマップを変化させる演出に対応するため、いまでも仮想のBG専用ビデオメモリを実装することはよくあります。
むしろスクロールする場合マップデータはコピーして使うのが原則で、そのまま画面表示に対応させることはあまりありません。
元のマップデータが分割されているかどうかとは別のことです。
逆に言えば、元のマップデータを分割しようがしまいが関係ないので仕様変更に強いということです。
単純にマップデータのサイズを大きくするだけでは仕様変更に弱くなります。
タイルを書き変えてマップを変化させる演出に対応するため、いまでも仮想のBG専用ビデオメモリを実装することはよくあります。
むしろスクロールする場合マップデータはコピーして使うのが原則で、そのまま画面表示に対応させることはあまりありません。
元のマップデータが分割されているかどうかとは別のことです。
逆に言えば、元のマップデータを分割しようがしまいが関係ないので仕様変更に強いということです。
単純にマップデータのサイズを大きくするだけでは仕様変更に弱くなります。
Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい
確かにそうですね。壁の向こう側が見えるのは不自然ですし、演出の一つとして今でも活用できますね。softya(ソフト屋) さんが書きました:既に書いていますが、ゲーム性には大いに意味がありますよ。
ゼルダは伝統的に、先の部屋の中は見せない演出を貫いています。これは3Dのゲームでも代わりません。
おっしゃる意味がよくわかりません。ゼルダはマップデータを分割しているのではなく、ISLe さんが書きました: タイルを書き変えてマップを変化させる演出に対応するため、いまでも仮想のBG専用ビデオメモリを実装することはよくあります。
むしろスクロールする場合マップデータはコピーして使うのが原則で、そのまま画面表示に対応させることはあまりありません。
元のマップデータが分割されているかどうかとは別のことです。
逆に言えば、元のマップデータを分割しようがしまいが関係ないので仕様変更に強いということです。
単純にマップデータのサイズを大きくするだけでは仕様変更に弱くなります。
現在使用しているマップデータに次のエリアのマップデータを上書きしているということでしょうか?
Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい
ゼルダであればそもそも静的なマップデータをベタな形で持っていることはないはずです。たかお さんが書きました:おっしゃる意味がよくわかりません。ゼルダはマップデータを分割しているのではなく、
現在使用しているマップデータに次のエリアのマップデータを上書きしているということでしょうか?
別に用意した作業用や表示用の領域を適切なタイミングで上書きします。
Re: 2Dゼルダ風マップスクロールの仕組みについて知りたい
バックグラウンドの領域にマップチップを書き込んで、それをゲーム画面に既存の画像の上から表示する感じですかね。
ゲームプログラミングにおける画像の取り扱いについて自分なりに勉強してみます。
回答ありがとうございました!
ゲームプログラミングにおける画像の取り扱いについて自分なりに勉強してみます。
回答ありがとうございました!