метод управления и ссылки персонажа на 2d карте тайлов - PullRequest
0 голосов
/ 29 августа 2011

Я делаю мессенджер с движущимся персонажем

(мессенджер в виде карты 2d, выглядящий как игра)

Я хочу, чтобы каждая плитка указывала, какой персонаж включен.моей программе нужно ссылаться на символ по координатам x, y символа.

Я пытался сделать так, чтобы на каждой плитке было место для структуры obj символа.

Хорошая точка этого метода в том, что каждый символ может бытьссылается на координаты x, y

, но было довольно сложно переместить сюда символ.

скопировать объект отсюда туда и удалить исходный объект координаты xy

и, наконец, измените управляющий указатель obj (для управления) с исходного объекта x, y на dest x, объект y.

это не так просто, ни просто в управлении, ни в экономии памяти.

, поэтому я рассматриваю второй метод.

есть массив плиток и массив obj.

при рендеринге objs, просто обращайтесь к x, y.

объекта, когдапользователь хочет переместить объект, просто измените x, y.

но если при ссылке на obj возникает проблема,

мне нужно искать массив obj по всему.

мой вопрос такой:

естьлюбой хороший метод для управления персонажем (obj) на 2d карте тайлов?

будет приветствоваться любое предложение.

1 Ответ

1 голос
/ 29 августа 2011

Вы не указали язык программирования, поэтому я буду использовать C # в своих примерах.

Символы и другие объекты, которые существуют на карте, обычно хранятся в отдельном списке,не двумерный массив.Каждый символ будет хранить свои собственные координаты x и y.Что-то вроде:

class Character
{
    int x, y;

    public int X
    {
        get{ return x; }
        set{ x = value; }
    }

    public int Y
    {
        get{ return y; }
        set{ y = value; }
    }

}

, и вы бы сохранили их в виде списка:

List<Character> characters = new List<Character>();

Если вам действительно нужно найти персонажа на определенной плитке, вы бы сделали что-то вродеэто (вероятно, есть способ linq сделать это в 1 строку, но это легче понять и прочитать):

int searchX = 10;
int searchY = 15;
Character characterOnLocation = null;
foreach(Character character in characters)
{
    if(character.X == searchX && character.Y == searchY)
    {
        characterOnLocation = character;
        break;
    }
}

Ваш метод рисования должен проходить по циклу ландшафта (как это, вероятно, уже делает),затем просто переберите массив символов и нарисуйте их, используя свои собственные координаты X и Y.Что-то вроде (используя XNA в этом примере):

foreach(Character character in characters)
{
    spriteBatch.Draw(texture, character.X, character.Y);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...