SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › Нужна помощь с взаимодействием с картой › Ответ в теме: Нужна помощь с взаимодействием с картой
да, цикл вызывает подозрение. плюс не понятно зачем делишь на отрицательное значение 180
посмотри в уроке было так:
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
void interactionWithMap()//ф-ция взаимодействия с картой { for (int i = y / 32; i < (y + h) / 32; i++)//проходимся по тайликам, контактирующим с игроком,, то есть по всем квадратикам размера 32*32, которые мы окрашивали в 9 уроке. про условия читайте ниже. for (int j = x / 32; j<(x + w) / 32; j++)//икс делим на 32, тем самым получаем левый квадратик, с которым персонаж соприкасается. (он ведь больше размера 32*32, поэтому может одновременно стоять на нескольких квадратах). А j<(x + w) / 32 - условие ограничения координат по иксу. то есть координата самого правого квадрата, который соприкасается с персонажем. таким образом идем в цикле слева направо по иксу, проходя по от левого квадрата (соприкасающегося с героем), до правого квадрата (соприкасающегося с героем) { if (TileMap[i][j] == '0')//если наш квадратик соответствует символу 0 (стена), то проверяем "направление скорости" персонажа: { if (dy>0)//если мы шли вниз, { y = i * 32 - h;//то стопорим координату игрек персонажа. сначала получаем координату нашего квадратика на карте(стены) и затем вычитаем из высоты спрайта персонажа. } if (dy<0) { y = i * 32 + 32;//аналогично с ходьбой вверх. dy<0, значит мы идем вверх (вспоминаем координаты паинта) } if (dx>0) { x = j * 32 - w;//если идем вправо, то координата Х равна стена (символ 0) минус ширина персонажа } if (dx < 0) { x = j * 32 + 32;//аналогично идем влево } } if (TileMap[i][j] == 's') { //если символ равен 's' (камень) x = 300; y = 300;//какое то действие... например телепортация героя TileMap[i][j] = ' ';//убираем камень, типа взяли бонус. можем и не убирать, кстати. } } } |