Das Thema unseres Projekts ist die Erstellung eines Programms, das eine Fusion simuliert.Begrenzt rect zur komplexen Form?
Wir haben ein Problem mit der Kollision mit unserer Klasse Fusion. Wir wollen eine komplexe Form für unsere Kollision machen.
Unsere Form ist zwei Kreis nahe beieinander, und wir wollen nicht eine begrenzende rect haben, aber „komplexe“ Form ...
dies unsere Fusion-Klasse ist
Fusion::Fusion(int x, int y)
{
this->setPos(x, y);
}
void Fusion::shape(){
//...
}
void Fusion::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
//set the color
QBrush brushColor(QColor(Qt::blue));
painter->setBrush(brushColor);
painter->setPen(QColor(Qt::blue));
painter->drawEllipse(0,0,40,40);
painter->drawEllipse(-20,-20,40,40);
}
void Fusion::doCollision()
{
// get a new position
// change the angle with randomness
if(qrand() %1)
{
setRotation(rotation() + (180 + (qrand() % 10)));
}
else
{
setRotation(rotation() + (180 + (qrand() % -10)));
}
// check if the new position is in bounds
QPointF newPoint = mapToParent(-(boundingRect().width()), -(boundingRect().width() + 2));
if(!scene()->sceneRect().contains((newPoint)))
{
// move back in bounds
newPoint = mapToParent(0,0);
}
else
{
// set the new position
setPos(newPoint);
}
}
void Fusion::advance(int step)
{
if(!step) return;
if(!scene()->collidingItems(this).isEmpty())
{
doCollision();
}
setPos(mapToParent(0, -1));
}
Hallo, vielen Dank für Ihre Hilfe !!! Aber damit sind wir ein Screenbug-Look -> [Bugscreen] (http://i.imgur.com/P5ib3lL.png). Idk wenn es weil die Form() ... eine Idee für diesen Fehler haben? –
Das Bild zeigt an, dass entweder Ihre boundingRect- oder Ihre Shape-Funktion nicht korrekt ist oder Sie prepareGeometryChange vor einigen Vorgängen, die sich auf die Ergebnisse dieser Methoden auswirken, nicht aufrufen konnten. Wenn das passiert, sehen Sie Zeichenartefakte, weil die alte Region nicht richtig gelöscht wird. – goug