少しだけ詳しく水たまりプログラム説明 その3
今回はシンプルにプログラム話(だけ)です。
さて、前回の記事で画面いっぱいの水面に穴あき地面を重ねるという方法を使ったわけですが、これって見た目だけなら問題なかったんです。
……そう、静止画像での見た目だけならば。
実際に動かしプレイしてみると、水面としては挙動が不自然なんですよ。
どういう事かと言いますと、下の画像のように複数の水たまりを独立して配置した場合のことです。
見た目には三つの独立した水たまりに見えますけど、これって画面全体の水面の上から穴あき背景を重ねているだけですから、水面処理的には全部繋がっているわけです。
テクスチャは繋がっててもギリ許されるかもしれない。だがしかし……。
この状態で動かすと当然、このようになります。
まあ一言で言って不自然ですよね。
この水たまりはすぐ近くにあるので、振動が伝わっている風に見えなくもないかもしれませんが、このヒロインどんだけ体重(ry 遠くにあってもそのうち波紋が届きます。これではよろしくない。
ならば画面全部に水面を貼り付けるのではなく、水たまりごとに小さな水面を貼り付けるか……?と考えたわけです。
こんな風に水面を配置して(分かりやすいように色を変えてあります)
この上から穴あき背景をかぶせれば、こんな風になります。
見た目は最初と同じですが、水たまり同士は繋がっておらず、それぞれ独立しています。
これで、どんなに動き回っても離れた水面に影響を与えなくなりました。
……しかし、これはこれでかなり面倒なんですよ。
背景の裏にあるのは矩形の水面ですから、水たまりの配置によっては、水面が互いに重なってしまう場合もあります。
例えばこののように配置したい場合、裏の水面をAとBのように置く必要がありますが、これではAがBにはみ出してしまいます。
これを防ぐためにはAを奥に、Bを手前に配置しないといけないのですが、この前後判定を自動で、しかもどんな配置でも矛盾なくやるのって結構難しいんです。というかムリ。
まあそこは仕様だと割り切ってしまうのが一番楽だし、あるいは水たまりを配置するときに気を付ければ良いだけなんですが、やっぱりもう少しうまく出来ないものかなと。
あと、むしろこちらの理由のほうが大きいのですが、この方法だとリアルタイムに水たまりを生成したり消したりするということが出来ないんです。
プレイヤーが敵を倒すとその場に白濁液だまりが生成されるとか、時間経過とともにそれがどんどん縮小して(乾いて)そのうち消えてしまうとか。
どうせならそういう事もやりたいなーと。
ゲーム作っていると起きる無駄に凝り始める症候群、初心者にはオススメ出来ない。
というわけで、次回で再び別のやり方を考えることにします。
つづく