Я пишу платформенную игру на с ++ и использую мозаичную карту для построения мира.
Карта содержит значения, которым назначены тайлы:
например, двумерного массива:
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-массиве? ?
Я читаю это пост (3-й пост вниз) и интересно, не лучше ли использовать 2D-массивы.
Мой спрайт всегда остается в центре окна, и после нажатия клавиш мой мир движется за ним.
Я хочу столкнуться с определенными плитками, поэтому мне нужно взаимодействие между плиткой 2D-массива спрайта и массивом Map 2D …
Кроме того, как оно есть, я могу выйти из карты, потому что я не кодировал это иначе. Как бы я пошел по этому поводу ? В идеале я хочу помешать ему покинуть карту, тогда я смогу объединить столкновение с этим.
Ниже приведен скриншот того, как все выглядит (но с картой большего размера, чем показано выше):
Если у меня есть:
int array[4][4];
Я могу получить доступ к элементам:
array[a_num][also_a_num]
где I и J являются действительными индексами.
Обычно, когда я хочу что-то подобное, я просто использую массив 1d и немного математики.
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];
Других решений пока нет …