将rect结合到复杂的形式?

时间:2016-11-30 10:02:52

标签: qt shape

我们项目的主题是制作一个模拟Fusion的程序。

我们遇到了与我们的classe Fusion相撞的问题。我们想让碰撞形状变得复杂。

printScreenFusionProgramm

我们的形状是彼此相邻的两个圆圈,我们不希望有一个边界矩形但形状“复杂”......

这是我们的Fusion课程

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));
}

1 个答案:

答案 0 :(得分:0)

您需要为图形项重新实现“形状”方法,以返回对象的实际形状。您可以在QPainterPath中返回所需的任何形状,Qt将使用它进行碰撞检测。