Уровень игры читается из файла в XNA - PullRequest
0 голосов
/ 11 февраля 2012

Я работал над движком карт на основе плитки для своего игрового проекта в Xna C #. Система, как и большинство других, использует цифру, соответствующую плитке в наборе плиток, сопоставленной с определенной позицией на экране. Это работает нормально, но требует, чтобы каждая ячейка на экране вводила число вручную. Вместо этого я решил читать макеты уровней из .txt, содержащего номер каждой плитки в той позиции, в которой она будет играть, например:

1111
0110
1001
1100

Где 1 - трава, а 0 - грязь. Опять же, я знаю, что это обычная техника. Код, который я написал, может прочитать каждую строку и установить следующую позицию в первом столбце для соответствующего графического элемента. Это хорошо, но это не помогает с остальной частью карты. Я искал и не могу найти, как бы вы разбили каждое число в строке на отдельное число, чтобы в первой строке было указано (0,0) = 1, (0,1) = 1 и т. Д., Чтобы я мог затем сопоставьте координаты с координатами x и y на карте, а значение - с типом плитки.

Итак, мне нужна возможность назначить 2d массив, соответствующий текущей позиции (сколько символов осталось в файле, сколько строк в файле .txt), так что я могу просто запустить два разветвленных цикла for ( х и у) для каждой плитки на уровне, т. е.

for (x=0; x<levelwidth; x++)
{
    for (y=0; y<levelheight; y++)
    {
        Row[x].Column[y].Tile = Convert.ToInt32(filepos[x,y]);
    }
}

Ответы [ 3 ]

1 голос
/ 11 февраля 2012

Вы не хотите использовать 2D-массивы из-за серьезных проблем с производительностью.

Кроме того, вы, вероятно, хотите использовать разделитель между номерами плиток, как это

1,1,1,1
1,0,1,1

по двум причинам; 1 вы можете использовать более 10 различных плиток, а 2 затем вы можете использовать String.Split () и Int.Parse (), чтобы получить ваши идентификаторы плиток и построить свою карту.

Чтобы использовать одномерный массив, вместо myMap [x] [y] вы делаете myMap [y * mapWidth + x].

0 голосов
/ 12 февраля 2012

Хотя запятые - лучший подход, вы также можете использовать .substring, чтобы разобрать их, если вещи имеют фиксированную длину.

0 голосов
/ 11 февраля 2012

Я перешел на использование XML, чтобы мне было легче редактировать и читать файл.Это также дало мне отличный способ указать конец ряда плиток на моей карте, а также простой способ определить, сколько столбцов / строк было на моей карте до того, как читатель загрузил ее в игру.

Образец кода можно найти на моем сайте в примере " Looks Level to Me ", и, возможно, он поможет получить некоторые идеи о том, как изменить ваш текущий подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...