我正在嘗試用異構瓷磚實現平鋪遊戲;不同大小的瓷磚。 所有瓷磚的尺寸均爲圓形(以米爲單位)以使其更容易。 我正在尋找一種適合僞隨機順序的瓷磚算法,要求當然一切都必須平鋪。異構瓷磚和珀林噪音
下面是我寫的幾行,但它不能根據需要工作。不知怎麼的,瓷磚之間的間距不受尊重。
首先我生成一個perlin噪聲圖,它是在旅途中創建的。我爲我的瓷磚地圖使用了字典。
瓷磚的對象米變量是以米爲單位的方形瓷磚的寬度和深度。 瓷磚陣列中的第一個瓷磚是一個空的瓷磚,用於指定跳過。
編輯:我現在看到在Unity中有一個縮放問題,當我在遊戲中將一個1的比例應用到飛機上時,它會導致10的大小。有人可以提供解釋嗎?
for(int i=-viewSpreadMeters;i<=viewSpreadMeters;i++)
{
for(int j=-viewSpreadMeters;j<=viewSpreadMeters;j++)
{
int x = currentTerrainID[0] + i;
int y = currentTerrainID[1] + j;
if (!tileMap.ContainsKey(x, y)) {
int id = noiseMap[x, y];
int iteratedTiles = 0;
Restart:
for (int k = 1; k < tiles[id].meters; k++) {
for (int l = 1; l < tiles[id].meters; l++) {
int x2 = x + k;
int y2 = y + l;
if (tileMap.ContainsKey(x2, y2)) {
int prevMeters;
do {
iteratedTiles++;
print ("Iterated tiles" + iteratedTiles);
if (iteratedTiles >= tiles.Length - 1) {
id = 0;
goto EndLoop;
}
prevMeters = tiles[id].meters;
id++;
id %= tiles.Length;
if (id == 0) id++;
} while(tiles[id].meters >= prevMeters);
goto Restart;
}
}
}
EndLoop:
tileMap.Add(x, y, id);
for (int k = 1; k < tiles[id].meters; k++) {
for (int l = 1; l < tiles[id].meters; l++) {
int x2 = x + k;
int y2 = y + l;
tileMap.Add(x2, y2, 0);
}
}
}
}
}
縮放問題仍然存在。我正在使用Unity飛機;以1x1的比例將導致10x10的大小。然而,增加這個常數並不重要。 – RobotRock 2013-03-31 20:40:44
如果您仍在嘗試使用異構拼貼大小,您可能需要查看Wang Tiles以瞭解它們如何使用邊緣編碼來匹配拼貼。只要其邊緣符合編碼方案,一個大於正常的圖塊就可以適用於這種方案.... http://procworld.blogspot.com/2013/01/introduction-to-wang-tiles。 HTML – theodox 2013-04-01 16:36:41