トップページ > 記事閲覧
マップのスクロール処理について
名前:overdo 日時: 2008/05/13 03:17

はじめまして。overdoといいます。
つい最近DXライブラリを知り、ゲームでも作ってみようとリファレンスとにらめっこしています。

そこで質問なのですが(うまく説明できないかもしれませんが)、例えば32×32のマップチップを
利用してタイル状でマップを作成する際に、予めSetDrawScreen(DX_SCREEN_BACK)をしておき、
裏画面にチップをDrawGraphで並べてマップを作成しますが、スクロールを考えて、実際の画面
より大きめのマップを作成し、SetDrawAreaで実際の画面分の大きさを反映させる手段をとると
思います。

そこでキャラを中心としてマップが"滑らかに"スクロールすると考えて、キャラが上に移動した
場合に、SetDrawAreaの座標を少しずつ下にズラして画面に反映するという手段を想像している
のですが、方法としてはこれで合っているでしょうか?

そしてその時に考えるのが、現在DrawGraphで作成しているマップの再利用なのですが、キャラが
上に移動した場合に、見えない部分の上辺のマップデータのみ読み込み、現在のDrawGraphで作成
しているマップを繋げる方法があるのかどうかが知りたいのです。
例えば、
↓裏画面にDrawGraphでマップ作成
↓別のメモリ領域にコピー
↓キャラが上に移動したとして・・
↓裏画面にDrawGraphで上1行(マップチップ)目のみ作成
↓別の領域にコピーしているマップの最下行を除いて(エリアを指定して)裏画面にセット
とすれば毎回全てのチップを並べ直さなくて良いかなと思いまして・・。

実際は見えてる1画面を中心に全方向の9画面分くらい読み込んでおき、1画面分移動したら
移動した先の3画面分をまとめて読み込みたいなと思ったからです。
・・・別の領域にマップを作成する処理を作って都度裏画面に範囲分をコピーするとか・・

ヒントでも、使う関数の順番の羅列でも構いませんので分かる方是非ご教授下さい。
よろしくお願いします。
メンテ

Page: 1 |

Re: マップのスクロール処理について ( No.1 )
名前:かたぱると 日時:2008/05/13 12:40

とりあえずDXライブラリサンプルプログラムのNo.4はご覧になられた後でしょうか?

<マップスクロール基本>
ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N4

メンテ
Re: マップのスクロール処理について ( No.2 )
名前:overdo 日時:2008/05/14 03:54

レスありがとうございます。はい。参考にさせていただいてます。
サンプルは(どのサンプルでもそうなのですが)移動の度に毎回画面を全て作成し直していますので、
ある程度画面が移動したらその先の足りない部分をまとめて読むような処理にして、その時に今まで
作成しているマップ画像を有効利用の為に合わせることが出来ないかなと思ったのです。
そうすると処理方法もマップのスクロールによりチップの描画位置をズラすのではなく、画面に反映
したい位置を矩形で指定して裏画面にコピーするような形になるのかなぁと思いまして・・・。

ちなみに3×3の9画面分をマップチップで予め作成しておいて、それを座標をズラしながら画面に
表示するにはどうすればいいのでしょうか?
すみませんが、宜しくお願いします。
メンテ
Re: マップのスクロール処理について ( No.3 )
名前:かたぱると 日時:2008/05/14 18:11

個人的な見解を書きます。

まず、9画面分の画像データを先に作成して必要部分を切り出して描画、という手法ですが
おそらくできるでしょう。

しかし、あまりに無駄が多すぎる為にオススメはできません。
主な理由として
・せっかくマップチップを使っているのに9画面分グラフィックを二次作成するのは本末転倒
・9画面分のグラフィックを作成するのはメモリの無駄遣い

等、無駄が多すぎると思います。

マップチップを利用しているのであれば
マップデータを更新する手法のほうが処理もメモリにもやさしいかと思います。

1例をあげるとすると

1つの数字を1画面として、
@ABCD
EFGHI
JKLMN
OPQRS

というような全体マップデータがあるとして

現在7の位置にいるとしたら
@AB
EFG
JKL

のマップデータをプログラム上に持ち、Fをフォーカスとしてサンプル4と同じ手法で描画を行い、
→に移動してフォーカスがGの位置に入った場合はマップデータのリロードを行い
ABC
FGH
KLM

のマップデータに更新してフォーカスをGの左端へ更新するほうが自然ではないかと思います。
32×32のマップチップで640×480の画面だとすると
9画面分のマップデータは
60×45とそれほど大きくないので現実的かと。

ドラクエ的に世界の端が繋がっているのであれば

NJK
SOP
D@A

みたいに表現することも可能ですしね。
メンテ
Re: マップのスクロール処理について ( No.4 )
名前:overdo 日時:2008/05/16 03:46

レスが遅くなりすみません。
おっしゃる通り、無駄ということもあり1画面分のデータのみ
作成しながらスクロールするようにしました。
スクロール先の画面余白1チップ分を並べ(全画面書き直し)ながらキャラを
中心として上下左右へ移動させるところまで作りました(更に上下左右ループ)。
(説明されてるのはファミコンのハイドライド風だというのは承知の上で)

余談ですが、作った後、大昔のPCでのRPGをYouTubeで見てたのですが、画面の中心付近
はアソビ(多少動いてもスクロールしない)部分があるのが多いですね。
ウロチョロしても常にマップが動かないのはちょっとした心配りな気がしました。
・・・そうしようかなと思っただけです。

ありがとうございました。
分からないことがあればちょくちょく伺いますので宜しくお願いします。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存