Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2021, 09:55   #1
student_di
Новичок
Джуниор
 
Регистрация: 08.04.2021
Сообщений: 4
По умолчанию Танчики на SFML. пройти в такие щели(как на фотке которую я скинул)

Я скинул код управления танка и взаимодействия с картой. Проблема заключаеться в том, чтобы пройти в такие щели(как на фотке которую я скинул), нужно подбирать точное значение Y, а иначе он будет стоять на месце и не двигаться. Как решить эту проблему?

Tyle = 32X32
Tank = 30X30


Код:
 void update(float time)  //где direct задаеться клавишами SWAD, а Dx и Dy ускорение
    {
        switch (direct)
        {
        case 0: Dx = speed; Dy = 0; break;
        case 1: Dx = -speed; Dy = 0; break;
        case 2: Dx = 0; Dy = speed; break;
        case 3: Dx = 0; Dy = -speed; break;
        }
        x += Dx * time;
        y += Dy * time;

        speed = 0;
        sprite.setPosition(x, y);
        interactwithmap();
    }
  
    void interactwithmap()
    {    
            for (int i = y / 32; i < (y + h) / 32; i++)
                for (int j = x / 32; j < (x + w) / 32; j++)
                {
                    if (maps[i][j] == '0')
                    {
                        if (Dy > 0)
                        {
                            y = i * 32 - h;
                        }
                        if (Dy < 0)
                        {
                            y = i * 32 + 32;
                        }
                        if (Dx > 0)
                        {
                            x = j * 32 - w;
                        }
                        if (Dx < 0)
                        {
                            x = j * 32 + 32;
                        }
                    }
                }
            
        
    }
Изображения
Тип файла: png Безымянный.png (7.8 Кб, 20 просмотров)
student_di вне форума Ответить с цитированием
Старый 08.04.2021, 12:07   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Надо сузить диапазон проверки коллизии, то есть разрешить небольшой наезд на препятствия. Допустим, так:
Код:
int k = 4;
            for (int i = (y + k) / 32; i < (y + h - k) / 32; i++)
                for (int j = (x + k) / 32; j < (x + w - k) / 32; j++)
Arigato вне форума Ответить с цитированием
Старый 08.04.2021, 15:09   #3
student_di
Новичок
Джуниор
 
Регистрация: 08.04.2021
Сообщений: 4
По умолчанию

Спасибо, очень помогло!!!
student_di вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Танчики на SFML. student_di Помощь студентам 0 08.04.2021 19:18
Как пройти циклом по map value ? Женя32 JavaScript, Ajax 0 18.05.2020 12:00
Как правильно SFML установить? Cuprum5 Общие вопросы C/C++ 6 22.07.2019 23:38
Как нарисовать в OpenGL сферу которую которую можно рассматривать с разных ракурсов Sh0cK Мультимедиа в Delphi 2 07.11.2017 14:51