Я пытаюсь сделать карту, читая текстовый файл построчно (потому что я не могу найти, как это сделать слово за словом). Итак, я делаю map00.txt, который выглядит как «33000000111» (каждое число — это одна строка, первые 2 строки — это количество столбцов и строк, поэтому матрица, в которую я загружаю ее, выглядит как 000 000 111). Теперь я должен нарисовать 3 плитки внизу (1 = нарисовать плитку). Я делаю это, рисуя плитку в ее положении в матрице * высота окна (ширина) / число строк (столбцов) матрицы. ПРОБЛЕМА: я не могу получить правильные параметры для текущей ширины и высоты окна.
Код для загрузки тайлов:
public int[,] LoadMatrix(string path)
{
StreamReader sr = new StreamReader(path);
int[,] a = new int[int.Parse(sr.ReadLine().ToString()),
int.Parse(sr.ReadLine().ToString())];
for(int i = 0; i < a.GetLength(0); i++)
for (int j = 0; j < a.GetLength(1); j++)
{ a[i, j] =int.Parse(sr.ReadLine().ToString()); }
sr.Close();
return a;
}
Код для рисования тайлов:
public void DrawTiles(SpriteBatch sp, GraphicsDeviceManager gdm)
{
for(int i = 0; i < matrix.GetLength(0); i++)
for(int j = 0; j < matrix.GetLength(1); j++)
{
if (i == 1)
{
sp.Draw(tile,
new Rectangle(j * (gdm.PreferredBackBufferWidth / 3),//matrix.GetLength(1),
i * (gdm.PreferredBackBufferWidth / 3),//matrix.GetLength(0),
gdm.PreferredBackBufferWidth / matrix.GetLength(1),
gdm.PreferredBackBufferHeight / matrix.GetLength(0)),
Color.White);
}
}
}
но в результате они рисуются примерно на 40 пикселей выше нижней части экрана!
и я пробовал с GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height(Width), но получаю тот же результат. И когда я помещаю рассчитанные числа, которые должны (теоретически) быть шириной/столбцами и высотой/строками, я получаю то, что хочу. Поэтому любые предложения будут ОЧЕНЬ оценены, потому что я давно застрял в этом в Google и Stack Overflow.
gdm.PreferredBackBufferHeight / 3
в качестве координаты y прямоугольника (вместо... Width
). - person Nico Schertler   schedule 13.02.2013