C++ 如何在QT游戏中持续发射子弹

C++ 如何在QT游戏中持续发射子弹,c++,qt,qt5,C++,Qt,Qt5,我的问题是如何在我的游戏中持续发射子弹。我可以发射一颗子弹,然后得到消息QGraphicscene::addItem:项已添加到此场景。我读过一些关于类似主题的帖子,但是解释并没有解决我的问题。这是我的代码片段。我知道这个项目已经添加了,但是如何避免这个问题并继续发射子弹呢?任何帮助或示例代码都将不胜感激 void LevelOne::keyPressEvent(QKeyEvent *event) { if (event->isAutoRepeat()) r

我的问题是如何在我的游戏中持续发射子弹。我可以发射一颗子弹,然后得到消息QGraphicscene::addItem:项已添加到此场景。我读过一些关于类似主题的帖子,但是解释并没有解决我的问题。这是我的代码片段。我知道这个项目已经添加了,但是如何避免这个问题并继续发射子弹呢?任何帮助或示例代码都将不胜感激

void LevelOne::keyPressEvent(QKeyEvent *event) {
    if (event->isAutoRepeat())
            return;

    switch (event->key()) {

    case Qt::Key_F:     
       addItem(bullet);          // Add the bullet
        break;
    case Qt::Key_Space:     

        break;
    default:
        break;
    }
}


void LevelOne::initPlayField() {

    bullet = new Bullet() ;
    bullet->setPos(m_player->pos().x(),  m_player->pos().y()
}

我的理解是,当你按下F键时,你想抛出子弹,每个子弹都是新的,所以你每次都必须创建那个对象

void LevelOne::keyPressEvent(QKeyEvent *event) {
    if (event->isAutoRepeat())
            return;

    switch (event->key()) {

    case Qt::Key_F:
       Bullet *obj = new Bullet();
       obj->setPos(m_player->pos().x(),  m_player->pos().y()
       addItem(obj);          // Add the bullet
       break;
    case Qt::Key_Space:     

        break;
    default:
        break;
    }
}

如果您知道项目符号有有限的使用寿命,并且存在一些最大数量的项目符号,您可以预先分配其中的许多项目符号(LevelOne field
Bullet bullets[MAX_bullets];
可能会工作,使用一些
std::bitset FiredBulets;
),然后重新使用阵列中的备用项目进行发射。下面的答案要求您在完成所有操作后删除项目符号,这将给动态内存管理带来一些压力(经常分配和释放大量小项目符号大小的内存片段)。这不是一个简单游戏的问题,但在AAA的标题,这将是一个问题。