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