2013-03-28 5 views
0

Я пишу платформенную игру на C++ и использую черепичную карту для построения мира.Доступ к элементу в 2D-массиве

Карта содержит значения, присвоенные плитки:

например, из 2D массива:

int map[4][4]={ 
    {1, 1, 1, 1}, 
    {1, 0, 0, 1}, 
    {1, 0, 0, 1}, 
    {1, 1, 1, 1}, }; 

создать спрайт подобным образом: int sprite[1][1]={ {2} };

Мой вопрос, как сделать вы получаете доступ к определенной плите или элементу в 2D-массиве ?

Я читал это post(3rd post down) и задавался вопросом, не являются ли 2D-массивы лучшими в использовании.

Мой спрайт всегда находится в центре окна и при нажатии на клавиши мой мир движется за ним.

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

Кроме того, как он стоит, я могу выйти из карты, потому что я гавань» t закодировал это иначе. Как я могу это сделать ? В идеале я хочу, чтобы он оставил карту, тогда я могу интегрировать столкновение с этим.

Ниже приведен скриншот того, что все выглядит (но с большей картой, чем показано выше): reanimation platformer

+0

'int sprite [1] [1] = {{2}};' Это двумерный массив с одним элементом в нем. Зачем вам это нужно? Что представляют собой 2? –

+0

Я попробовал рисовать спрайт, используя «OpenGL quad», но он не показывался на экране, а также не показывал плитки, когда я это делаю. Я использовал 2D-массив для спрайта для решения проблемы. Плюс я подумал, что проще сохранить элитную плитку, так как ее легче взаимодействовать с плиткой с плиткой, чем плитка с пользовательским прямоугольником. «2» представляет значение, которое присваивается 'Tile2'. – Reanimation

ответ

1

Если у меня есть:

int array[4][4]; 

я могу получить доступ к элементам по:

array[a_num][also_a_num] 

где i и j - действительные индексы.

Обычно, когда я хочу что-то вроде этого, я просто использую 1-й массив и некоторую математику.

int height = a_num; 
int width = also_a_num; 
int amap[height * width]; 
int x_pos,y_pos; 
int value = amap[y_pos*width + x_pos]; 

Вы можете легко проверить границы на x_pos и y_pos.

Что касается столкновения, вы можете попробовать массив структур.

struct tile{ 
    bool walkable; 
    int type; 
}; 

tile amap[height*width]; 
+0

Это действительно хороший ответ. Спасибо: D Я дам ему назад. И да, этот пост/форум, который я связал в вопросе, использует массив 1D. Спасибо за ваше время, его очень ценят. – Reanimation