Я делаю 2-мерную игру с прокруткой и пытаюсь использовать 2-мерный или так называемый набор тайлов. Мой друг дал мне код, который он использовал для своих игр, но его код поддерживает только 1 измерение.XNA tilemap tileset
public void DrawMap(Texture2D tilesheet, SpriteBatch spriteBatch)
{
for (int x = 0; x < map.GetLength(1); x++)
{
for (int y = 0; y < map.GetLength(0); y++)
{
spriteBatch.Draw(tilesheet, new Vector2((x * 64) , (y * 64)), new Rectangle(map[y, x] * 64, 0, 64, 64), Color.White);
}
}
}
это где появляется проблема, потому что это групповой проект, и мы получаем графики из графического дизайнера и у нас слишком много плитки (64x64 размера), чтобы вписаться в один ряд текстуры, которая поддерживается для XNA (4096 пикселей, я думаю). Я почти не понимаю код, который мне дал мой друг, и, вероятно, это проблема. Если кто-нибудь знает, как сделать метод draw, поддерживающий 2 измерения, так что я могу использовать плитки, это размеры (вместо 512x512) вместо 64x4992 (к которым относится мой текущий набор плиток).
public Level()
{
map = new int[14, 50]
{{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,18,19,20,21,22,23,24,17,18,19,20,21,22,23,24,2},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,27,28,29,30,31,32,25,26,27,28,29,30,31,32,2},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,34,35,36,37,38,39,40,33,34,35,36,37,38,39,40,2},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,42,43,44,45,46,47,48,41,42,43,44,45,46,47,48,2},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,0,0,0,0,49,50,51,52,53,54,55,56,49,50,51,52,53,54,55,56,2},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,58,59,60,61,62,63,64,57,58,59,60,61,62,63,64,2},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,0,0,0,0,0,0,0,0,0,65,66,67,68,69,70,71,72,65,66,67,68,69,70,71,72,2},
{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,6,7,2,12,13,3,3,3,3,3,3,3,3,3,73,74,75,76,77,78,79,80,73,74,75,76,77,78,79,80,2},
{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}};
overlay = new int[14, 50];
background = new int[14,50];
}
public void DrawMap(Texture2D tilesheet, SpriteBatch spriteBatch)
{
for (int x = 0; x < map.GetLength(1); x++)
{
for (int y = 0; y < map.GetLength(0); y++)
{
//http://imgur.com/1r9VUUN
spriteBatch.Draw(tilesheet, new Vector2((x * 64), (y * 64)), new Rectangle((map[x, y] % 8) * 64, (map[x, y]/8) * 64, 64, 64), Color.White);
}
}
}
Так им редактирование мои карты в плиточные и я понял, что плиточные рассчитывает 1-2-3-4-5, не 0-1-2-3-4-5. Поэтому, если вы посмотрите на мой набор фишек (прокомментировал ссылку imgur методом draw-draw), вы увидите, что у меня есть пробел перед первой плиткой, но это означает, что каждая плитка имеет свое значение position + 1 в xna, что может быть, поэтому im проблемы его рисования, потому что плитка im, пытающаяся рисовать, не существует в тайнике.
Сначала мой плохой выключатель х и порядок у, использование карты [у, x] вместо map [x, y], чтобы избежать исключения OutOfRangeException, во-вторых, я не вижу ссылки на изображение !! – Usama
http://imgur.com/1r9VUUN здесь вы идете! –