这是我在这里的第一篇文章,所以请温柔;)
我试图在 XNA 中制作平铺地图,并且我已经使用 perlin 方法随机生成我的地图,该方法生成用于平铺地面选择的灰度纹理。
我就是这样做的
internal void RenderNew(int mapWidth, int mapHeight)
{
_mapHeigth = mapHeight;
_mapWidth = mapWidth;
Tiles = new Tile[_mapWidth, _mapHeigth];
bool moveRowLeft = true;
//Create the map array
for (int y = 0; y < _mapHeigth; y++)
{
moveRowLeft = !moveRowLeft;
for (int x = _mapWidth - 1; x >= 0; x--)
{
Tile t = new Tile(x, y, _mapWidth, _mapHeigth)
{
Position = new Vector2(x * tileWidth + (moveRowLeft ? tileWidth / 2 : 0), (y * tileHeight / 2))
};
t.Ground = Tile.GroundType.Grass;
Tiles[x, y] = t;
}
}
//Generate the grayscaled perlinTexture
GenerateNoiseMap(_mapWidth, _mapHeigth, ref perlinTexture, 20);
//Get the color for each pixel into an array from the perlintexture
Color[,] colorsArray = TextureTo2DArray(perlinTexture);
//Since a single pixel in the perlinTexture can be mapped to a tile in the map we can
//loop all tiles and set the corresponding GroundType (ie texture) depending on the
//color(black/white) of the pixel in the perlinTexture.
foreach (var tile in Tiles)
{
Color colorInPerlinTextureForaTile = colorsArray[tile.GridPosition.X, tile.GridPosition.Y];
if (colorInPerlinTextureForaTile.R > 100)
{
tile.Ground = Tile.GroundType.Grass;
}
else if (colorInPerlinTextureForaTile.R > 75)
{
tile.Ground = Tile.GroundType.Sand;
}
else if (colorInPerlinTextureForaTile.R > 50)
{
tile.Ground = Tile.GroundType.Water;
}
else
{
tile.Ground = Tile.GroundType.DeepWater;
}
}
}
因此,我使用的纹理表包含沙子、草、水和深水的纹理。但它也包含用于创建漂亮重叠的瓷砖,即从沙子到水等。
!试图发布我的tileset图像,但我不能以防万一我是这个网站上的新人;(
所以我的问题是,我怎样才能使用重叠的瓷砖呢?我如何知道何时使用重叠瓷砖以及朝哪个方向使用?
所有瓷砖也“知道”它在所有八个方向上的相邻瓷砖(S,SE,E,NE,N,NW,W,NE)
//谢谢