From 18 Jan, 2021 0:00 UTC: All services will be temporary unavailable for maintenance

Forums: Open Discussion (Thread #8324)

マップサイズ限界突破方法 (2005-07-30 12:00 by yf30 #15587)

通常は、最大500x500なんだけど
これをもっと広くしたいと言うのを森でみた
で、いろいろ検討した結果をまとめ。

■案1 マップ端に行ったら違うマップへ場所移動する。
これは、場所移動イベントを、マップの端全部にならべるのと基本的な考え方は一緒。
要するにプレイヤーがマップの端まで来たらあらかじめ指定してあるマップへ場所移動をさせる。
場所移動の時は、トランジションを使わずに、フェードもなしで移動させる。

すこし面倒で、妥協しなければならない点は、以下の3点

・連結されるマップは、全て同じサイズにする。
・マップの端は、全て同じタイルで埋め尽くされている。
・場所移動なので多少引っかかる感じがする。

サイズは、例えばX座標10の状態で、下のマップに移動した場合、X座標はやはり10のまま移動しなければならないため。
連結される辺のサイズのみでもいいはずだけど、左右上下に連結するわけだから必然的に同じサイズになる。

タイルは、マップ端に行った場合は、プレイヤーを画面中央に表示した場合、反対側の地形が表示されてしまうため。

この制限なら、すごく簡単。
制限が厳しいけど、問題点はなさそう。

■案2 マップを連結する。
この案は、RPG::MapのdataがTableクラスでマップ情報を管理しているのを利用して
マップ読み込み時に、連結するマップ同士のdataをデータ的に連結してしまう方法。

この方法だと、案1のタイル制限が緩和される。
データ的に連結されるため場所移動等の処理は必要なく
システムは1つのマップのつもりで動作する。
多少引っかかる感じもしなくなり、4マップにまたがる街なんかも可能

ただし、案1では、タイルマップがマップ毎に変更することが出来るが
案2ではむり。

で、やってみたけど、このTableの連結が思った以上に重い。
さらにイベント等の連結まで必要なので、実際にはもっと重い。
実現が難しいことがわかった。

■案3 マップを連結する(2)
案2で問題だった点を、解決するために考えた方法。
ゲーム内で表示する際に連結すると処理が重いため
あらかじめ連結したRPG::Mapクラスを用意してしまう方法。

この場合、タイルマップが1種類しか使えなくなってしまう以外は
解決できると思う。
さらにイベント等の連結まで必要なのは同じだけどゲーム実行中でなければ
全てを置き換えて保存しておくことはやればできる。

案3は、作成したRPG::Mapをどう保存しておくのかが
問題になるのだけど、ためしにマップ1・2・3・4をタイル状にならべた
マップを作成、マップ1に全てを連結させ、マップ1のファイルに保存。
この場合、マップ1のサイズが1000x1000になるがツクールは
それをどう表示するのかたしかめた…結果、マップの編集が不可能になってしまった。
イベントは、編集できる。

よって、ツクールで編集するデータを限界以上にしておくは危険なので
別ファイルにしておくのが良いと思われる。

テストするときに一度連結しないとならなくなるため
開発が大変になると思われるが、最初からしっかり設計されてば
なんとかなるか?

■まとめ
以上の、方法をプロトタイプしてみたけど…
実際に1000x1000のマップを歩くと、広すぎる。
たしかに広いマップは、魅力的だけど、実際に表示できるのはその一部分のみなわけで、
あまり効率がいいとは言えない。

地方ごとに、500x500のマップでも充分世界の広さを表現できるので
このスクリプトは、いらないと思われる。

やるのであれば、マップ端にいったら場所移動するイベントを自動的に実行すると言うスクリプトで充分。
イベントを自分で書かないで済む利点のみが必要であり、1つのマップの様に見せる必要はない。

と、考えたのだけど、どうでしょう~?

RE: マップサイズ限界突破方法 (2005-08-06 10:18 by Anonymous #15656)

てかそんなにマップもいらないよな
500x500で十分
ゼルダとかポケモンみたいなの作る人は結構
必要になるかもww
Reply to #15587