W
May 1, 2019, 3:32 a.m.

Баг с обработкой коллизий QT

qt, c++

Столкнулся с такой проблемой: обработка коллизий персонажнем работает корректно, но если персонаж будет ехать максимально близко к какому-либо объекту, то этот объект "засосет" персонажа в свои текстуры и оттуда не возможно выехать, вот видео:

https://youtu.be/9gEBYOXrE90

Сама обработка:

        bool isCollision = false;
        QList<QGraphicsItem*> colliding_items = collidingItems();
        for (int i = 0; i < colliding_items.size(); i++){
            if (typeid(*(colliding_items[i])) == typeid(box))
                isCollision = true;
            if (typeid(*(colliding_items[i])) == typeid(RedPlayer))
                isCollision = true;
            if (typeid(*(colliding_items[i])) == typeid(wooden_box))
                isCollision = true;
        }

        if (isCollision){
            if (idLastKeyPressed == 1){
                this->setPos(x(), y() + 6);
            }
            else if (idLastKeyPressed == 2){
                this->setPos(x(), y() - 6);
            }
            else if (idLastKeyPressed == 3){
                this->setPos(x() - 6, y());
            }
            else if (idLastKeyPressed == 4){
                this->setPos(x() + 6, y());
            }

            return;
        }

Подскажите, как пофиксить это?

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
2

Добрый день, я сталкивался с такой проблемой позже. Вам нужно делать расчёт коллизии до того, как танк передвинется. А не после того, как танк заехал в текстуру. Это решут эту проблему, а также танк перестанет дёргаться когда доедет до стены. То есть делать предсказательный расчёт коллизии с будущим предполагаемым местоположением. И если при будущем положении коллизия есть, но не двигаться или корректировать траекторию движения.

0
W

Спасибо, совет помог

0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
NM
July 20, 2019, 10:59 a.m.
Nikolaj Morozov

C++ - Test 001. The first program and data types

  • Result:73points,
  • Rating points1
AD
July 19, 2019, 9:51 a.m.
Anastasia Dutchina

C++ - Test 001. The first program and data types

  • Result:53points,
  • Rating points-4
AD
July 19, 2019, 9:46 a.m.
Anastasia Dutchina

Qt - Test 001. Signals and slots

  • Result:57points,
  • Rating points-2
Last comments
July 21, 2019, 6:03 a.m.
Evgenij Legotskoj

да, наверное, 32-х разрядную поддержку уже давно поа было выкинуть. К слову, у вас много проектов под Android? Часто много где вижу вопросы о том, пишет ли кто-то вообще на Qt под мобильные си...
July 20, 2019, 2:41 p.m.
Andrej Jankovich

Очень полезная информация, увы уже выкинул поддержку 32 битных бедняг.
July 20, 2019, 9:31 a.m.
Mihailll

Вот так qDebug()<<"position:"<<event->scenePos();
July 20, 2019, 8:49 a.m.
Mihailll

Добрый день. Как можно узнать координату на графической сцене при отпускании клавиши мыши?
Now discuss on the forum
July 21, 2019, 6:07 a.m.
Evgenij Legotskoj

Если вы про этот метод QRectF MoveItem::boundingRect() const{ return QRectF (-30,-30,60,60);} То мне нужно было, чтобы координата (0,0) была по центру квадрата в его локальной си...
July 20, 2019, 11:04 a.m.
Mihailll

Так и с ресурсами работает QImage image(":/Images/Images/1.png");
July 19, 2019, 10:55 a.m.
Mihailll

Да. Там похоже каждое устройство генерирует свой токен, этот токен нужно как то получать и использовать в запросе. Но как это делать я пока не понял.
July 19, 2019, 9:31 a.m.
Mihailll

Добрый день. Повернул ListView в горизонтальное положение. При прокрутке эллементы выстраиваются у левого края окна. Как в QMK в ListView сделать центрирование по центру? ...
b
July 18, 2019, 2:27 a.m.
bbb116

Когда отрисовки не видно, объекты AreaSelector создаются (при нажатии и движении мышкой), но почему то не срабатывает paint() у них, хотя делаю update этой области. Причем эти области мо...
Looking for a Job?
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

EVILEG
About
Services
Join us
© EVILEG 2015-2019
Recommend hosting TIMEWEB