У меня есть элементы QGraphicsEllipse как пули в сцене. Цели - это изображения QPixmap, и я хочу, чтобы взаимодействовали только пули и изображения, а НЕ цель при столкновении с целью. Пули создаются в моем классе сцены, а QPixmaps создаются в моем классе диалога.
Я попытался добавить QList для QPixmaps, созданных аналогично QList QGraphicsItem *, но не думаю, что компилятору это понравилось. Мы ценим любые предложения.
void Scene::advance()
{
QList <QGraphicsItem *> itemsToRemove;
foreach( QGraphicsItem * item, this->items())
{
if( !this->sceneRect().intersects(item->boundingRect()))
{
// The item is no longer in the scene rect, get ready to delete it
itemsToRemove.append(item);
}
}
foreach( QGraphicsItem * item, itemsToRemove )
{
this->removeItem(item);
delete(item);
}
QGraphicsScene::advance();
}
BoundRect включен в мой класс MainTarget
QRectF MainTargets::boundingRect() const
{
qreal shift = 1;
return QRectF(-w/2 -shift, - h/2
- shift, w + shift, h + shift);
}
QPainterPath MainTargets::shape() const
{
QPainterPath path;
path.addRect(boundingRect());
return path;
}
ИЗМЕНИТЬ
class GraphicsCircle : public QGraphicsRectItem
// class for the pellets
{
public:
GraphicsCircle(qreal dirx, qreal diry)
: m_Speed(5)
, m_DirX(dirx)
, m_DirY(diry)
{
setRect(-3.0,-3.0,8.0,8.0);
setPos(-140, 195);
QRadialGradient rGrad( 0.0, 0.0, 20.0, 0.0, 0.0);
rGrad.setColorAt(0.0, QColor(255,255,255));
rGrad.setColorAt(0.7, QColor(255,255,225));
rGrad.setColorAt(1.0, QColor(255,0,0,0));
setBrush(QBrush(rGrad) );
setPen(QPen(Qt::NoPen));
}
virtual ~GraphicsCircle() {}
void advance(int phase)
{
if(phase == 0) return;
setPos(x()+m_Speed*m_DirX, y()+m_Speed*m_DirY);
}
private:
qreal m_Speed;
qreal m_DirX;
qreal m_DirY;
};
Я изменил свой объект QPixmap на QGraphicsPixmapItems. Итак, вернемся к исходной проблеме, как столкнуть шарики, QGraphicsItems, с целями, QGraphicsPixmapItems. Я подумал, что это будет какая-то форма:
if(pellets->collidesWithItem(targets){
remove(pellets)
remove(targets)
}
intersects
, вы можете обнаружить столкновение вручную, используя геометрические модели. - person v.oddou   schedule 26.03.2014