あなたはそれが完璧である必要はないと言いますから、水の移動量に関して定義されたステップで更新することは問題ではないかもしれません。水の半分が動くのに要する時間は、勾配と水の量によって変わります。したがって、急な斜面にある大量の水の半分は、それほど急な斜面では少ない量の時間と同じ時間がかかるということは、まだ奇妙に見えるかもしれません。しかし、あなたの方法はまだ潜在的可能性があります。
move_waterの呼び出しごとに1ブロックまたはすべてのブロックを更新すると、それは奇妙に見えるので、私はその1つだけではないと仮定します。
すべてのブロックを処理すると仮定すると、ルールはブロックを処理する順序によって異なる結果になります。 x座標を大きくする順番で処理するだけで、なぜ不自然な波が表示されるのか想像することができます(下のブロックは別のブロックから取得し、次に別のブロックに与えて再び獲得することができます)。一方、最高点を最初に処理した場合、または最高の高さの差の順に処理した場合は、より良い結果を得ることができます。
土地と水を合わせた高さを考慮する必要があります。水の半分ではなく、高さの差の半分を動かしてみることをおすすめします。
これをまだ実行していない場合は、1次元、フラットな地形を考慮して、ブロック内のさまざまな水量を開始して、起こっていることを簡単に解決できるようにすることができます。
最後に、水を斜めに動かすことなく、上下左右を意味する場合、周りのブロックの4つに水を移動するだけで少し奇妙に見えます。一次元でうまく流れていれば、2Dの場合は近くにある8つのブロックに移動することを検討してください(ブロックが長方形のグリッド内にあると仮定して)。
出典
2017-09-06 18:10:41
ROX
水はある時点で流れなくなりますか?私は波が現実的だと思うが、あなたが望むかどうかわからない。 – anatolyg
他の4つのブロックにmax(!)1/2の水を与えることで修正できますか? 'otherblocks.waterlevel + newWater> currentblock.waterlevel - newWater'がそれらの値と等しい場合。 – CFrei
"現実的な"シミュレーションでは、水の速度*も考慮する必要があります(垂直のみと仮定して)。 – meowgoesthedog