【问题标题】:QT collision detection with custom QGraphicsItem classes使用自定义 QGraphicsItem 类进行 QT 碰撞检测
【发布时间】:2014-06-25 08:50:32
【问题描述】:

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

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

我这样做的方式是否正确?他们都是QGraphicsItems

【问题讨论】:

    标签: c++ qt qgraphicsitem qdialog


    【解决方案1】:

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

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

    【讨论】:

    • 这对我不起作用。我收到此错误 \bullet.cpp:76: error: no matching function for call to 'qobject_cast(QGraphicsItem*&)' 敌人 * item= qobject_cast(i);
    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多