現在DXライブラリでゲームを作っているのですが
フィールド画面時の描画方法で分からないことがあります。
よく、市販のゲームなどでは操作するキャラクターが建物の影や草むらに入ったときは
キャラクターの一部が建物の影に隠れて建物が上に描画されたり、草むらでは草むらと草むらに挟まれる形で描画されていますが
あれは一体どのように画像を描画していっているのでしょうか?
今の自分の描画方法は背景はマップチップから読み込み画面の左上から順番に右下まで描画して
その後にキャラクターを上に少しずらして描画しています。
この方法だと、草むらの上に描画されたりしてあまり草むらに入っているように見えません。
こういった処理は普通どのように行うものなのでしょうか?
よろしくお願いします。
背景とキャラクターの描画について
Re: 背景とキャラクターの描画について
一般的にはZソートと呼ばれる処理を行い、奥から手前に向かって描画します。
Zとは奥行きのことで、キャラクタに何らかの基準点を設け、奥行きを求め比較して並び替え(ソート)します。
本件のような場合、基準はキャラクタの足元の座標を用います。
キャラクタが宙に浮いている場合は、そこから垂直に下ろして地面と接する点になります。
建物のようにある程度大きくて固定されたものの場合は、タイルマップのレイヤー(層)を分けて描画します。
処理としてはタイルマップ全体をひとつのキャラクタとみなしたものです。
レイヤーを持たないタイルマップにおいて特殊な方法もあります。
キャラクタの足元と重なる部分のタイルと同デザインで透過部分を持つ画像を用意し、キャラクタの上からタイルと同座標に描画する方法です。
ただし、複数のキャラクタがいて、草むらで草を挟むように立つ場合などは透過画像とキャラクタ間でZソートが必要になります。
Zとは奥行きのことで、キャラクタに何らかの基準点を設け、奥行きを求め比較して並び替え(ソート)します。
本件のような場合、基準はキャラクタの足元の座標を用います。
キャラクタが宙に浮いている場合は、そこから垂直に下ろして地面と接する点になります。
建物のようにある程度大きくて固定されたものの場合は、タイルマップのレイヤー(層)を分けて描画します。
処理としてはタイルマップ全体をひとつのキャラクタとみなしたものです。
レイヤーを持たないタイルマップにおいて特殊な方法もあります。
キャラクタの足元と重なる部分のタイルと同デザインで透過部分を持つ画像を用意し、キャラクタの上からタイルと同座標に描画する方法です。
ただし、複数のキャラクタがいて、草むらで草を挟むように立つ場合などは透過画像とキャラクタ間でZソートが必要になります。
Re: 背景とキャラクターの描画について
分けて描画できるならそれが良いかと思います。kon さんが書きました:地面と、草むらや建物を分けて描画するということでしょうか?
分ける場合と分けない場合とそれ以外、の3つの方法を提案したつもりですが。
それぞれ組み合わせて使うこともできます。
Re: 背景とキャラクターの描画について
分かりやすいかどうか分かりませんが、提案した3つの方法を図にしてみました。
左上のが完成図です。
各行、右にいくほど優先順位が高くなります。
1行目は、背景の上にZソートしたキャラクタを順番に描画する方法です。
もっとも応用が効きますが手間もかかります。
2行目は、高さで分けたタイルマップを重ねる方法です。
通路が立体的に交差するマップでよく使われます。
例えば、この上に人物を描画して、柱の上に立っているように見せることもできます。
3行目は、キャラクタに重なる部分だけを隠すことでその都度前後関係を作り出す方法です。
容量等ハードウェアの制約が厳しい、プログラムを大きく変えたくない、などの場合の姑息な手段です。
うまく使えば便利です。
左上のが完成図です。
各行、右にいくほど優先順位が高くなります。
1行目は、背景の上にZソートしたキャラクタを順番に描画する方法です。
もっとも応用が効きますが手間もかかります。
2行目は、高さで分けたタイルマップを重ねる方法です。
通路が立体的に交差するマップでよく使われます。
例えば、この上に人物を描画して、柱の上に立っているように見せることもできます。
3行目は、キャラクタに重なる部分だけを隠すことでその都度前後関係を作り出す方法です。
容量等ハードウェアの制約が厳しい、プログラムを大きく変えたくない、などの場合の姑息な手段です。
うまく使えば便利です。