タクティクスオウガの HERMIT を考える その3

前回は、描画の重なりを持つものをオブジェクトとして管理して、毎回重なり順に描くという実装になった。
この方法では実際には重ならない部分があるタイルですらオブジェクトになってしまうため、
無駄がずいぶんと発生してしまった。今回はこの重なりの無駄の排除について実装する。

重なった部分だけを重ねればよい

さて、改めて重なりについて下図で考えてみる。1 のところ。
hh10.png


このとき、どの部分が重なるかというと、上側のタイルに被っている 2 の赤枠で囲ったところ。
しかしこの赤枠の部分だけを毎回描き直せば良いというわけではなく、大型ユニットなどの
体が 1 タイルぶんより大きいオブジェクトのために、実際にはもう少し広い範囲を描き直さないといけない。
(1 タイルぶんより大きいということは、上下左右方向に 1 タイルに収まらないということである)
今回は、実装の簡単な 3 の範囲を描き直すことにした。


実装はそれほど難しくはなく、重なりが発生するオブジェクトの該当部分を切り出せばよい。


とまあそんな感じで、こうなったときは
hh08.png


こんな感じで切り出せる。
hh09.png
マップの縁の部分は重なりがあるけど無いようなものなので、オブジェクトからはずしたほうが良いかもしれない。


ソース
キーボードの "1" を押すと上みたいに切り替わる。


まあ一応なんか良さそうな感じにはなったが、実際にはまだまだ問題も多い。
タイル一個分しか対応していないし、城壁などの実装は未定だ。アニメーションもできない。


HERMIT の一番好きなところ

さて、上の画面とかを見て勘の鋭い方ならお気づきであろうが、もう一つ特徴的な機能も実装した。


ググって拾ってきたこの画像を見ていただきたい。
567b112c.jpg


うーん、本家はやっぱいいねえ。じゃなくて、
赤い矢印のところ、実は、重なりがあるものは認識しやすいように黒で縁取りがされているのだ。
以前作ったときに、何故か地形が見えづらくて見比べてみて分かったのだが、こういう仕組みが素晴らしいと思う。


というわけで切り出したオブジェクトに対して縁取りをするようにしてみた。
かなり見やすくなったと思う。


次回は

頑張ってキャラの歩行パターンを描いたので、そろそろ歩かせてみたい。
次回はカーソルを実装する。