トピックが流れてしまったようなのでもう一度立てさせていただきます。
以前の質問でマップチップを並べることはできたのですが、今度はキャラクターとマップチップとの描画順位でつまずいています。
段差があって、マップの高さがある場合、キャラがマップの後ろに隠れたりしないで、段差の上に描画されてしまいます。
今は一列ずつ判定してそこにあるマップチップやキャラなどを一斉に描画しているという方法をとっているつもりですが、重なったり重ならなかったりで上手くいきませんでした。
クォータービューのマップで段差がある場合、キャラが重ならないで描画する方法を教えてください。
使用環境はXPのVisual C++でDxライブラリを使っています。
描画順について
Re:描画順について
言葉で説明するのに良い表現を思いつかなかったので
サンプルを作ってみました。
簡略化した形で一から書いているので
そのままは使えませんが、
意図するところは解って貰えるかなと思います。
要はどの段階でキャラクターを描画するかです。
サンプルを作ってみました。
簡略化した形で一から書いているので
そのままは使えませんが、
意図するところは解って貰えるかなと思います。
要はどの段階でキャラクターを描画するかです。
Re:描画順について
返信ありがとうございます。
静止状態では上手くいきました。
ですが、キャラを動かしてみると、前のマップチップに埋もれてしまいます。
移動中はif(tMob.x == x && tMob.y == y)をいじって描画順位を一つ上げるようにしてみましたが、移動先の周囲に段差があると、今度は隠れなくなったり、マップの端に付くと、描画しなくなってしまっています。
これを直そうとすると、例外処理が大量に発生しそうなので、なんとか例外処理をしないですむ方法はないでしょうか?
静止状態では上手くいきました。
ですが、キャラを動かしてみると、前のマップチップに埋もれてしまいます。
移動中はif(tMob.x == x && tMob.y == y)をいじって描画順位を一つ上げるようにしてみましたが、移動先の周囲に段差があると、今度は隠れなくなったり、マップの端に付くと、描画しなくなってしまっています。
これを直そうとすると、例外処理が大量に発生しそうなので、なんとか例外処理をしないですむ方法はないでしょうか?
Re:描画順について
サンプルはキャラクターより奥にあるタイルを
先に描画するという事だけを伝えるための
ものでしたので実際に使うにはふさわしくありません。
すみません、少々配慮が足りませんでした。
基本的にはキャラクターより下、
または奥にあるタイルを先に描画するのですが、
画像を見てタイルを描画していく状態を
思い浮かべてみてください。
1→2→3...と描画したとして、
キャラクターよりも後に1に高さのあるタイルを描画すると
キャラ頭部が消えてしまいます。
6や8のタイルをキャラより後に描画すると
移動させた時に移動した部分が消えます。(サンプルはこの状態ですね。)
つまり地面となるタイルと奥にある高さのある
タイルは先に描画しておかなければ
ならない事になります。
1、地面部分の描画
2、キャラクターのまたがるタイルの取得
移動させる場合A地点とB地点の二つ以上のタイルを
またぐことになります。
3、高さを持つタイルに2で取得した
タイルに対する優先順位を付ける。
4、優先順位に沿ってキャラクターと残りのタイルを描画
先に描画するという事だけを伝えるための
ものでしたので実際に使うにはふさわしくありません。
すみません、少々配慮が足りませんでした。
基本的にはキャラクターより下、
または奥にあるタイルを先に描画するのですが、
画像を見てタイルを描画していく状態を
思い浮かべてみてください。
1→2→3...と描画したとして、
キャラクターよりも後に1に高さのあるタイルを描画すると
キャラ頭部が消えてしまいます。
6や8のタイルをキャラより後に描画すると
移動させた時に移動した部分が消えます。(サンプルはこの状態ですね。)
つまり地面となるタイルと奥にある高さのある
タイルは先に描画しておかなければ
ならない事になります。
1、地面部分の描画
2、キャラクターのまたがるタイルの取得
移動させる場合A地点とB地点の二つ以上のタイルを
またぐことになります。
3、高さを持つタイルに2で取得した
タイルに対する優先順位を付ける。
4、優先順位に沿ってキャラクターと残りのタイルを描画