Auf der Screen nähert sich gelbe Kugel dem gelben Bogen und trifft es. Jeder Bogen (schwarz, grün und gelb sind Bögen - verschiedene Objekte). Kollisionserkennung, wenn der Ball gelbe Bögen trifft, zeigt 3 Objekte - 3 Bögen, auch wenn er nur einen gelben Bogen trifft.Kollisionserkennung funktioniert nicht richtig
Code aus Kreisen (Bögen) (er erbt von QGraphicsItem). Die Breite ist eine Stiftbreite, also befindet sich die Kollision am äußeren Rand des Bogens.
Einige Code von Ball (es inheits von QGraphicsObject) und Kollisionserkennung in 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;
}
}
Ich weiß wohl, wo ist der Fehler: in Kreis :: Form() der Pfad eine Ellipse ist, aber es soll ein Bogen sein. Wie soll ich einen Pfad wie folgt erstellen:
painter->drawArc(boundingRect(), startAngle, spanAngle);
Es hat nichts geändert, ich habe auch eine Form(), also ist die Bounding Box in Ordnung. Wenn der Ball den Bogen trifft, sagt er mir, dass er 3 Bögen trifft, nicht einen, alle mit pos = pos = 1280.540 (Bildmitte). –