#c# #class #random #monogame
#c# #класс #Случайный #моногейм
Вопрос:
Я создаю простой платформер в MonoGame с процедурно сгенерированными островами в качестве местности. У меня есть 4 важных класса: AllIslands, Islands, Ground и GroundBlocks. AllIslands — это класс, который управляет островами и вызывает их процедурную генерацию. Islands — это класс, который создает остров со случайной длиной и положением. Ground — это класс, который управляет и создает ряды наземных блоков.
Я пытаюсь сгенерировать острова с пространством между ними, для этого я использую переменную RightXOfLastIsland , эта переменная содержит крайнее правое значение X острова. Я смотрю на RightXOfLastIsland, а затем добавляю к нему случайную величину для определения положения нового острова. Моя проблема в том, что острова перекрываются, и я понятия не имею, почему.
class AllIslands
{
public List<Island> ListOfIslands = new List<Island>(0);
public int RightXOfLastIsland = 0;
public AllIslands()
{
}
public void CreateIsland(Ground ground)
{
if (ListOfIslands.Count > 0)
{
Island previousIsland = ListOfIslands[ListOfIslands.Count - 1];
RightXOfLastIsland = previousIsland.RightXOfLastIsland;
}
Island island = new Island(ground, RightXOfLastIsland);
ListOfIslands.Add(island);
}
public void ProcedurallySpawnIslands(Player player, Ground ground)
{
if (player.Position.X > RightXOfLastIsland - 200)
{
CreateIsland(ground);
}
}
}
class Island
{
public int RightXOfLastIsland;
public Island(Ground ground, int rightXOfLastIsland)
{
RightXOfLastIsland = rightXOfLastIsland;
Random random = new Random();
int tempRightX = RightXOfLastIsland / 100;
int locationX = random.Next(tempRightX 5, tempRightX 10);
int locationY = random.Next(5, 9);
int lengthRowOfBlocks = random.Next(5, 10);
Vector2 location = new Vector2(locationX * 100, locationY * 100);
ground.CreateGroundBlocks(location, lengthRowOfBlocks);
RightXOfLastIsland = RightXOfLastIsland (lengthRowOfBlocks * 100);
}
}
Комментарии:
1. Местоположение Vector2 содержит значение x для LeftX для вновь созданного острова, верно? Если это так, вы не добавляете его значение в RightXOfLastIsland в последней строке, кроме предыдущего значения и длины блоков? Вы пробовали рисовать / рисовать это на листе бумаги?