Xin lỗi nếu tiêu đề đó không mang tính mô tả. Dù sao, tôi đang làm việc trên một cái gì đó đối phó với cảnh quan ngẫu nhiên tạo ra. Tôi đã làm hồ, nhưng do chúng được tạo ra như thế nào, chúng thường gây ra các cạnh/rớt thẳng, không mong muốn. Tôi đang cố gắng làm mịn nó (ngay sau khi làm hồ, nếu có thể), bằng cách xác định số lượng biến đổi tối đa (vì vậy chiều cao đất không thể thay đổi nhiều hơn), và sửa nó nếu nó thay đổi nhiều, và bỏ nếu nó là khỏe.Làm mịn đất xung quanh các hồ
Vấn đề:
sửa chữa cố gắng của tôi:
Như bạn có thể nhìn thấy ... nó đã không làm việc. Nó cũng xảy ra với tôi, tôi nghĩ rằng nó sẽ bị phá vỡ nếu nó phải di chuyển xuống, mặc dù trường hợp đó không nên thực sự xảy ra, bởi vì hồ chỉ bao giờ chìm phong cảnh. Dù sao, đây là nguồn gốc của nỗ lực của tôi:
//smoothing land nearby
int maxVariation = 2; //similar to the max height variation when the land is generated
//going right
for (int xPos = rightBound + 1, previousHeight = 0; ; ++xPos)
{
if (previousHeight == 0)
for (; previousHeight < size.y; ++previousHeight)
if (grid[0][rightBound][previousHeight] != BlockColor::DIRT && grid[0][rightBound][previousHeight] != BlockColor::GRASS)
{
--previousHeight;
break;
}
for (int y = 0; y < size.y; ++y)
if (grid[0][xPos][y] == BlockColor::WATER)
goto done_smoothing_right;
int height;
for (height = 0; height < size.y; ++height)
if (grid[0][xPos][height] != BlockColor::DIRT && grid[0][xPos][height] != BlockColor::GRASS)
{
--height;
break;
}
int difference = std::abs(height - previousHeight);
previousHeight = height;
if (difference > maxVariation)
{
for (int j = 0; j < size.y; ++j)
{
int toMove = difference;
while (j + toMove >= size.y)
--toMove;
grid[0][xPos][j] = grid[0][xPos][j + toMove];
}
}
else
goto done_smoothing_right;
}
done_smoothing_right:
int tomakegotowork;
Lưu ý rằng chỉ phía bên phải, nhưng trái nên được về cùng. Làm thế nào tôi có thể làm điều này một cách chính xác?
Cảm ơn nếu bạn có thể trợ giúp.
EDIT:
Tôi chưa bao giờ giải quyết vấn đề này. Thay vào đó, tôi đã thực hiện một chức năng đệ quy để đo không khí, (từ một độ cao nhất định), và nếu một túi không khí (hình thành bởi đất) có đủ, để đổ đầy nước. Điều này có lợi thế của đất trông mịn vì nó không bị thay đổi.
rightBound là rightBound của hồ? Do hồ chỉ xảy ra ở độ cao 0? –
@MikeSaull Có, rightBound là x của nước ngoài cùng bên phải. Hồ không chỉ xảy ra ở 0, nhưng với chiều cao đất hiện tại và độ sâu hồ, nó trông như thế. –