ページ 11

マップチップを使わないスクロール

Posted: 2011年12月14日(水) 23:42
by gtts@yama
今、ゲームプロミングの練習中です
そこで悩んでいることがあります

マップスクロールのやり方についてです
前までは主人公以外のオブジェクトの座標を実際に変化させて
マップスクロールのようなものを作っていたのですが
先日、マップスクロールについて記述してあるサイトがあったので参考にしてみようと思いました
しかし、そこに書いてあったのはマップチップを使ったスクロールのやり方でした
自分が考えているのはマップチップではなく一つ一つのオブジェクトに座標を指定していくマップです

どうか誰か優しい方、ソースをどう書けばよいか、どんな考え方をすればよいか教えていただけませぬか
かといってマップチップの方のやり方も完璧に分かっていないのでお恥ずかしいのですが

Re: マップチップを使わないスクロール

Posted: 2011年12月15日(木) 00:32
by softya(ソフト屋)
どっちの場合にも言えるのですが、移動を管理する座標と画面表示の座標は別に考えると良いと思います。

Re: マップチップを使わないスクロール

Posted: 2011年12月15日(木) 23:17
by gtts@yama
やっぱり、初心者がいきなりオリジナルに手を出すのは無理だと思ったので
http://homepage2.nifty.com/natupaji/DxL ... am.html#N4
DXライブラリのサンプルプログラムを真似てみることにしました
ここで分からないことがあったのですがこちらのサイトの4番のマップスクロール(簡易版)
のMapDrawPointX = PlayerX - DrawMapChipNumX / 2 ;
MapDrawPointY = PlayerY - DrawMapChipNumY / 2 ;
この二文の意味が分かりません
どうしてこの値が画面左上のマップ座標を表しているのかがです
プログラムの全貌を見てみたのですがだいたいは把握できました
しかし、この文はさっぱりです なぜこうなるのでしょうか?
softya(ソフト屋) さんが書きました:どっちの場合にも言えるのですが、移動を管理する座標と画面表示の座標は別に考えると良いと思います。
これは上でも言っている画面左上の座標ということでしょうか

Re: マップチップを使わないスクロール

Posted: 2011年12月15日(木) 23:32
by softya(ソフト屋)
MapDrawPointX = PlayerX - DrawMapChipNumX / 2 ;
MapDrawPointY = PlayerY - DrawMapChipNumY / 2 ;
は自キャラのマップチップ座標を基準に画面の左上のマップチップ座標を求めています。こうすると自キャラが画面の真ん中になります。
DrawMapChipNumX とDrawMapChipNumY は描画されるマップチップのXとY方向ですからその半分ということで画面の真ん中です。

>これは上でも言っている画面左上の座標ということでしょうか

そうです。
Xだけに限って説明するとPlayerX を基準にMapDrawPointX を求めてマップを画面に描画します。
その他のキャラもMapDrawPointX を基準として相対位置で画面に描画します。
描画の位置は、すべてPlayerX を基準にするということです。

Re: マップチップを使わないスクロール

Posted: 2011年12月16日(金) 16:30
by gtts@yama
softya(ソフト屋) さんが書きました:描画の位置は、すべてPlayerX を基準にするということです。
え?ということはマップチップを使わない場合のマップスクロールは
マップチップを使う場合より簡潔になりますね 
今まではオブジェクトをどこに配置するかを決めていましたが
キャラからどれだけ離れた場所にオブジェクトを配置するかが大事ってことですか?

(現在、合宿中で友達のパソコンから投稿していてコード検証ができないのですが
考え方としてはあっていますか?)

Re: マップチップを使わないスクロール

Posted: 2011年12月16日(金) 16:55
by softya(ソフト屋)
マップチップを使わない場合も座標で管理することは変わりません。
マップ全体の座標系(例えば横1200ドットあれば、0~1999)から表示の座標系(横640なら0~639)への変換は必要です。
座標だけでやるにしても表示上は自キャラが画面の中心であることは変わりません。

>キャラからどれだけ離れた場所にオブジェクトを配置するかが大事ってことですか?

結局、自キャラは移動するので各オブジェクトの配置は背景マップの座標を基準にすべきだと思います。自キャラも管理上は背景マップの座標を基準に動いている事になります。
あとマップチップを使わないので背景との当たり判定(障害物)は別の方法を考える必要があります。

[まとめ]
・自キャラや各オブジェクトの移動・当たり判定の座標
マップ背景の座標を使用する。

・表示の座標
自キャラを表示画面の中心に置いて、これを基準に計算してマップ背景や各オブジェクトの表示座標を決定する。