На Screen желтый шар приближается к желтой дуге и бьет его. Каждая дуга (черный, зеленый и желтый - это дуги - разные объекты). Обнаружение столкновений, когда мяч попадает в желтые дуги, показывает 3 объекта - 3 дуги, даже когда он ударяет только по одной желтой дуге.Обнаружение столкновений не работает должным образом
некоторый код из кругов (дуги) (он наследует от QGraphicsItem). Ширина - это ширина пера, поэтому столкновение находится на внешней границе дуги.
#include ball.h
QRectF Circle::boundingRect() const
{
QRectF rect(-radius, -radius, radius*2, radius*2);
return rect;
}
QPainterPath Circle::shape() const
{
QPainterPath path;
path.addEllipse(QRectF(-radius-width, -radius-width, (radius+width)*2, (radius+width)*2));
return path;
}
Некорректный код из шара (он скрыт от QGraphicsObject) и обнаружение столкновения в paint().
QPainterPath Ball::shape() const
{
QPainterPath path;
path.addEllipse(boundingRect());
return path;
}
QRectF Ball::boundingRect() const
{
QRectF rect(-radius, -radius, radius*2, radius*2);
return rect;
}
void Ball::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
if (!scene()->collidingItems(this).isEmpty()) {
for (int y = 0; y<collidingItems().size(); y++)
qDebug() << collidingItems().at(y);
delete this;
}
}
Я, наверное, знаю, где ошибка: в Круге :: форма() путь является эллипсом, но она должна быть дугой. Как я должен был сделать такой путь:
painter->drawArc(boundingRect(), startAngle, spanAngle);
Это не имело никакого отношения, у меня тоже есть форма(), поэтому ограничивающая рамка в порядке. Когда мяч попадает в дугу, он говорит мне, что он попадает в 3 дуги, а не один, все с pos = pos = 1280,540 (в центре экрана). –