ZBLOG

mainGame::mainGame(QWidget *parent) : QWidget(parent) , ui(new Ui::mainGame) { ui->setupUi(this); QVBoxLayout layout(this); m_pMainGameScene = new QGraphicsScene(); m_pMainGameScene->setSceneRect(-100, -100, 200, 200); ...

要在 QGraphicsScene 中实现一个项目组的下落效果,我们可以使用定时器来更新项目组的位置。以下是一个示例,展示了如何让您之前创建的方形项(红色、黄色、蓝色和青色)以一定速度下落。

首先,你需要将必要的成员变量添加到 mainGame 类中,以便进行位置更新。然后,可以设置一个定时器来每隔一段时间更新项目组的位置并重绘场景。

修改 mainGame

  1. 添加成员变量

    • 定义一个定时器。
    • 添加一些控制下落速度的参数。
  2. 启动定时器

    • 在构造函数中启动定时器,并连接到处理下落的槽函数。
  3. 实现下落逻辑

    • 在槽函数中更新项目组的位置。

代码示例

下面是您的代码经过修改后的版本:

  1. #include <QTimer>
  2. #include <QGraphicsItemGroup>
  3. class mainGame : public QWidget {
  4. Q_OBJECT
  5. public:
  6. explicit mainGame(QWidget *parent = nullptr);
  7. private slots:
  8. void updateDrop();
  9. private:
  10. Ui::mainGame *ui;
  11. QGraphicsScene *m_pMainGameScene;
  12. QGraphicsView *m_pMainGameView;
  13. QGraphicsItemGroup *m_pGroup;
  14. QTimer *m_dropTimer; // 定义一个计时器
  15. };
  16. mainGame::mainGame(QWidget *parent)
  17. : QWidget(parent)
  18. , ui(new Ui::mainGame)
  19. {
  20. ui->setupUi(this);
  21. QVBoxLayout layout(this);
  22. m_pMainGameScene = new QGraphicsScene();
  23. m_pMainGameScene->setSceneRect(-100, -100, 200, 200);
  24. m_pMainGameView = new QGraphicsView(m_pMainGameScene);
  25. m_pMainGameView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  26. m_pMainGameView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  27. layout.addWidget(m_pMainGameView);
  28. layout.setContentsMargins(0, 0, 0, 0);
  29. this->setLayout(&layout);
  30. // 创建方块
  31. QGraphicsRectItem *pItem_1 = m_pMainGameScene->addRect(0, 0, 20, 20, QPen(Qt::black), QBrush(Qt::red));
  32. QGraphicsRectItem *pItem_2 = m_pMainGameScene->addRect(0, -20, 20, 20, QPen(Qt::black), QBrush(Qt::yellow));
  33. QGraphicsRectItem *pItem_3 = m_pMainGameScene->addRect(-20, -20, 20, 20, QPen(Qt::black), QBrush(Qt::blue));
  34. QGraphicsRectItem *pItem_4 = m_pMainGameScene->addRect(-20, 0, 20, 20, QPen(Qt::black), QBrush(Qt::cyan));
  35. // 创建项组并添加到场景
  36. m_pGroup = new QGraphicsItemGroup();
  37. m_pGroup->addToGroup(pItem_1);
  38. m_pGroup->addToGroup(pItem_2);
  39. m_pGroup->addToGroup(pItem_3);
  40. m_pGroup->addToGroup(pItem_4);
  41. m_pMainGameScene->addItem(m_pGroup);
  42. // 启动计时器
  43. m_dropTimer = new QTimer(this);
  44. connect(m_dropTimer, &QTimer::timeout, this, &mainGame::updateDrop);
  45. // 设置计时器间隔为50毫秒
  46. m_dropTimer->start(50);
  47. }
  48. // 更新下落逻辑
  49. void mainGame::updateDrop() {
  50. // 获取当前组的 Y 坐标并向下移动5个单位
  51. qreal yPos = m_pGroup->y();
  52. yPos += 5; // 下移5个单位
  53. // 如果超出边界则重置回顶部或其他逻辑处理
  54. if (yPos > height()) {
  55. yPos = -30; // 移回到上方重新开始或其他处理
  56. }
  57. // 更新组的新Y坐标
  58. m_pGroup->setY(yPos);
  59. // 更新视图以反映更改(可选)
  60. m_pMainGameView->update();
  61. }

示例说明:

  1. 成员变量:新增了一个 QTimer 类型的成员变量 m_dropTimer 用于控制下落频率。

  2. 计时器设置:在构造函数中,启动了计时器,并设定每隔50毫秒触发一次 updateDrop() 槽函数,该槽函数负责更新位置。

  3. 位置更新逻辑:在 updateDrop() 方法中,获取当前项组的位置,并每次增加Y坐标来实现下落效果。如果达到了底部边界,则可以选择将其移动回上方或者执行其他相应操作,比如结束游戏等。

通过这种方式,你就能够实现你所需的“项目组下落”功能了!你可以根据需要调整速度和行为。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21321

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?