我正在尝试创建一个子弹类,一旦它检测到它与某些东西发生碰撞,它就会删除一个敌人类。我正在尝试做类似的事情:

void bullet::DoCollision()
{
    if(collidesWithItem(enemy))
    {
        QList<enemy> collisions = collidingItems(enemy);
    }
    //sudo code
    //foreach collision
    //delete enemy
}
//delete myself

我是否以正确的方式解决这个问题?它们都是 QGraphicsItems

最佳答案

您可以使用 QGraphicsItem::collidingItems 返回与此项目发生冲突的所有项目的列表。获取列表后,您可以检测碰撞项目是否属于敌人类型,如果是,则将其删除:

QList<QGraphicsItem *> list = collidingItems() ;

foreach(QGraphicsItem * i , list)
{
    enemy * item= dynamic_cast<enemy *>(i);
    if (item)
    {
        myScene->removeItem(item);
    }
}

关于c++ - 使用自定义 QGraphicsItem 类进行 QT 碰撞检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23533691/

10-11 17:43