Я полагаю, что вы хотите только случайным образом сгенерировать плитки один раз и затем нарисовать ЭТ случайную последовательность каждый раз .Помните, что Draw
в XNA запускает каждый «кадр», что обычно происходит чаще, чем раз в секунду!
Скопируйте ваши текущие циклы в новую область: загрузку вашей карты.Также добавьте 2D-структуру данных (массив или что-то еще), чтобы сохранить результаты генерации вашего тайла.Я называю мой примерный двумерный целочисленный массив tileNums
.Теперь оставьте циклы такими, какие они есть сейчас, но измените внутренние параметры для сохранения результатов вместо рисования:
Random rand = new Random();
for(int y = 0; y < map.GetLength(0); y++) {
for(int x = 0; x < map.GetLength(1); x++) {
tileNums[x, y] = rand.Next(0,3);
}
}
Теперь просто измените внутренние параметры текущего цикла Draw
, чтобы он больше не генерировался случайным образом, а вместо этого:взять из этих данных:
//Random object no longer needed
for(int y = 0; y < map.GetLength(0); y++) {
for(int x = 0; x < map.GetLength(1); x++) {
theSpriteBatch.Draw(tile[tileNums[x, y]], new Rectangle(x*tileWidth,y*tileHeight,tileWidth,tileHeight),
Color.White);
}
}