检测到碰撞后删除用户定义qGraphicItems

时间:2014-05-08 17:15:37

标签: c++ qt qgraphicsitem qgraphicsscene

我有一个子弹类,我想在击中任何东西时删除,但如果它击中了敌人,我希望它也能删除敌人。它正在我的桌面上工作,但在切换到我的笔记本电脑时,它会在它移除时开始崩溃。目前我的场景位于Dialog.cpp的另一个类中

这是我的代码:

bullet.cpp

void bullet::DoCollision()
{
    QList<QGraphicsItem *> list = collidingItems() ;

    foreach(QGraphicsItem * i , list)
    {
        if (i->type() == 3)
        {
            QGraphicsItem * item= i;
            delete item;

            qDebug() << "bye";
        }
    }
    m_FireTimer->stop();

    delete this;
}

1 个答案:

答案 0 :(得分:0)

您应该使用QGraphicsScene::removeItem(QGraphicsItem * item)从场景中删除项目及其所有子项。您应该在myScene等变量中保存指向场景的指针。

您的代码应该是:

void bullet::DoCollision()
{
    QList<QGraphicsItem *> list = collidingItems() ;

    foreach(QGraphicsItem * i , list)
    {
        if (i->type() == 3)
        {
            QGraphicsItem * item= i;
            myScene->removeItem(item);
            delete item;

            qDebug() << "bye";
        }
    }
    m_FireTimer->stop();

    delete this;
}