Monogame - Загрузка плитки
У меня проблемы с загрузкой некоторых плиток в мою игру. Мой игровой мир в настоящее время имеет размер пикселя 770x450. Я загрузил одну плитку в позиции (0, 330)
Однако я хочу сделать цикл, который копирует и загружает плитку вдоль оси х, пока не достигнет (770, 330)
, Я мог бы просто скопировать код и вставить код, чтобы загрузить каждую плитку отдельно, но это был бы плохой код.
Вот мой ток Initialize()
код:
protected override void Initialize()
{
position = new Vector2(0, 330);
// x axis = 770 pixel
// y axis = 450 pixels
this.IsMouseVisible = true;
base.Initialize();
}
Моя плитка объявлена как Texture2D gameTile;
,
1 ответ
http://xnaresources.com/default.asp?page=Tutorial:TileEngineSeries:1
Эта ссылка предоставляет учебное пособие, которое охватывает большую часть того, что вам понадобится для создания движка плиток.
Похоже, вы создаете плитки внутри функции "Initialize Applications". Вам лучше создать какой-нибудь менеджер листов, который будет хранить все нужные вам плитки.
С точки зрения создания плиток, вы можете использовать либо массив структур, либо структуру массивов. Для первого вы должны создать класс Tile, который будет хранить как минимум положение плитки. При использовании таблицы спрайтов для рендеринга листов вы также можете включить TileID, чтобы определить, какой лист следует использовать для рисования.
Для структуры массивов вы можете хранить массив векторов, которые будут использоваться для плиток (внутри Tile Manager), и другой массив TileID. Оба метода работают. Вероятно, я бы порекомендовал первый для вас, хотя для удобства чтения и практики объектно-ориентированного программирования.
Texture2D также должен быть загружен только один раз. Вы не публикуете информацию о том, где вы выполняете загрузку, или как вы планируете делать больше плиток, поэтому я предполагаю, что вы планировали загружать texture2D для каждой плитки, что было бы плохой идеей.
Наконец, с точки зрения зацикливания, как только вы создадите свой класс плиток, ваш менеджер плиток или функция инициализации будут проходить циклически, чтобы создать и установить позицию для каждой плитки (псевдокод):
int tileRowCount = mapSizeX / tileSizeX;
int tileColumnCount = mapSizeY / tileSizeY;
for(int rowIndex = 0; rowIndex < tileRowCount; rowIndex++)
{
for(int columnIndex = 0; columnIndex < tileColumnCount; columnIndex++)
{
tileList.Add(new Tile(new Vector2(columnIndex * tileSizeX, rowIndex * tileSizeY);
}
}
Тогда для рисования:
foreach(Tile tile in tileList)
{
///not exact Draw call, not looking at the documents right now
tile.Draw(spriteBatch, tileTexture, tile.Position);
}
Это суть того, что я думаю, что вы после. Если я на неправильном пути, дайте мне знать, я адаптирую ответ. Я пропустил некоторые более мелкие детали, но если у вас есть какие-либо проблемы, есть ссылка, и вы можете спросить больше.
Отредактировано: часть рисунка не была в формате кода