@XerimHD

Как сделать чтоб перснаж не мог проходить через стены?

я сделал код чтоб он не мог проходить он то роботает ну как-то странно
void interactionWithMap()
    {
        float new_x = x;
        float new_y = y;

        for (int i = y / 16; i < (y + h) / 16; i++)
        {
            for (int j = x / 16; j < (x + w) / 16; j++)
            {
                if (TileMap[i][j] == '0' || TileMap[i][j] == '1' || TileMap[i][j] == '2')
                {
                    if (dy > 0)
                    {
                        new_y = i * 16 - h;
                    }
                    if (dy < 0)
                    {
                        new_y = i * 16 + 16;
                    }
                    if (dx > 0)
                    {
                        new_x = j * 16 - w;
                    }
                    if (dx < 0)
                    {
                        new_x = j * 16 + 16;
                    }
                }

                if (TileMap[i][j] == 's')
                {
                    x = 300;
                    y = 300;
                    TileMap[i][j] = ' ';
                }
            }
        }

        x = new_x;
        y = new_y;
    }

Ну он то роботает ну все равно есть некоторые проблемы.
Подскажите как это можно исправить.
Тайли у меня 8 на 8
Внизу скрены на всех максильно упёрся как можно было
65b578c767474127345156.jpeg
65b578cf59715131486336.jpeg
65b578d70106f162120231.jpeg
65b578e09ea54583498572.jpeg
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Если отбросить в сторону общую упоротость кода (облом делать ревизию), проблема вот в чём.
Работая с коллайдером (фигурой, которая участвует в проверке столкновений, она же хитбокс), вы выбрали диапазон клеток
[y / 16; (y + h) / 16).

Например, y = 1, h = 16, (y+h)/16 = 1, диапозон [0,1), и проверяется только клетка 0. А надо 0 и 1.

Так что надо [y / 16; (y + h - 1) / 16]. ВКЛЮЧАЯ СПРАВА.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы