我正在尝试使用异构瓷砖实现平铺游戏;不同大小的瓷砖。所有的瓷砖尺寸都是四舍五入的(到一米),以使其更容易。我正在寻找一种以伪随机顺序拟合瓷砖的算法,要求当然所有东西都必须平铺。
下面是我写的几行,但它不能按需要工作。不知何故,瓷砖之间的间距没有得到尊重。
首先,我生成了一个在旅途中创建的 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);
}
}
}
}
}