2011-10-11 54 views
3

我一直在考慮用僞無限運行時程序生成的世界製作自上而下的2D遊戲。我讀過幾篇關於程序生成的文章,也許我誤解或誤解了他們,但我還沒有遇到過一個解釋如何將世界劃分爲(就像Minecraft顯然那樣)。如何將運行時程序生成的世界劃分爲塊

顯然,我只需要生成玩家目前可以看到的世界部分。例如,如果我的遊戲是基於瓦片的,我可以將世界分成n * n個塊。如果玩家在這樣一個塊的邊界,我也會產生相鄰的塊。

我無法弄清楚的是,我如何採用程序化的世界生成算法,並且一次只在一個塊上使用它。例如,如果我有一個算法可以產生一個大的結構(例如城堡,森林,河流),這些結構會分散在許多塊上,我怎麼調整它只產生一個塊,然後是相鄰的塊?

我很抱歉如果我完全錯過了一些明顯的東西。先謝謝你!

回答

4

研究Midpoint displacement algorithm。請注意,一側的點都基於拐角的起始值。你可以在不知道網格的其他部分的情況下計算它們。

我用這種方法來生成地形。我需要每塊「地塊」的邊緣與相鄰的塊相對。使用中點位移算法的變體,我使得沿着塊的邊緣的每個點的高度僅基於兩個角處的值來計算。如果我需要添加隨機性,我會用兩個角落的數據爲隨機數生成器生成一個隨機數。這樣,任何兩個相鄰的塊都可以獨立生成,並且邊緣肯定匹配。

您可以使用高度貼圖進行其他操作。數據可以決定植被類型,人口密度等等,而不是高度。而不是山丘和山谷相匹配的大塊高度圖,你可以在森林中找到植被圖。

它肯定需要一些創意編程來適應任何複雜的世界。

+0

非常感謝!我會研究它。 – liviucmg

+0

+1中點位移。這是一個非常好的起點,因爲它很容易實現和理解(也很快閃電)。只有當你從中點位移獲得的文物成爲一個問題時,或許值得考慮一下perlin或單純的噪音,這些噪音要複雜得多,而且很不直觀。 – Arahman