SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Поворот спрайта и проблема пересечения с другими объектами
В этой теме 4 ответа, 2 участника, последнее обновление Павел Букреев 8 года/лет, 6 мес. назад.
-
АвторСообщения
-
Пишу игру с летающим объектом вид сверху. Самолёт летит и поворачивается в разные стороны (урок №17-18). Возникла проблема пересечения с другими объектами. Когда летит вверх, коллизии отображаются адекватно, но когда начинаешь поворачивать пули пролетают сквозь спрайт и пересекаются где-то позади него. Я так понял или смещается центр, или(хотя это маловероятно) программа не успевает зафиксировать позицию объекта в данный момент и делает пересечения в том месте где был спрайт.
Задано sprite.setOrigin(w/2, h/2); sprite.setRotate(angle);
Может быть кто-то сталкивался с такой проблемой?
нужно проверить стековку setOrigin(пополам) и setPosition (пополам)
Спасибо за ответ. В принципе, все работает более-менее нормально, но иногда все-таки пролетает мимо, или неадекватно попадает.
В процессе исправления этого бага, возникла идея вместо спрайта(поскольку он у меня больше напоминает треугольник) использовать два пересекающихся прямоугольника sf::RectangleShape. Но теперь возникла проблема с функцией пересечения с остальными объектами. RectangleShape взят из-за того, что его можно вращать и изменять размер.
Фрагмент кода:
C++123456789for (itbul = bullets.begin(); itbul != bullets.end(); itbul++){if (((*itbul)->getRect().intersects(hero.body1 ???) || (*itbul)->getRect().intersects(hero.body2 ???)) && (*itbul)->hero_shoot != 1){(*itbul)->health = 0;(*itbul)->life = false;hero.health -= (*itbul)->damage;}}getRect() – возвращает FloatRect спрайта пули
body1 и body2 – это sf::RectangleShape
??? – это для наглядности вопроса
Вопрос: есть ли какая-то функция пересечения объектов типа FloatRect и RectangleShape?
“Это же элементарно, Ватсон!” hero.body1.getGlobalBounds(), не поставил скобки и весь вечер изобретал велосипеды…
как я рад, что бегло случайно прочитал следующий пост. а то бы тоже весь вечер изобретал )))
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.