首页 > 解决方案 > 如何将到达图形视图右侧(末端)的 QGraphicsPixmapItem 移动到左侧(开始)侧(就像蛇游戏中发生的事情)

问题描述

我有一个显示像素图项目的 QGraphicsView 小部件。用户可以移动项目。当项目到达图形视图的右(或左)端时,我希望项目从另一侧进入(具有相同的 X 和 Y 坐标(就像蛇游戏中发生的那样)

标签: c++qtqt5qgraphicsviewqgraphicsscene

解决方案


解决方案

在设置像素图的位置时,检查它是否小于场景矩形宽度-像素图的宽度,如果是not,则将位置设置为zero

注意:如果您在相反方向移动,请进行类似的检查,即将像素图的位置设置为场景矩形的宽度-像素图的宽度,如果它不大于像素图的宽度

例子

这是我为您准备的一个最小示例,以演示如何实施建议的解决方案:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    QPixmap pixmap(64, 64);
    auto *view = new QGraphicsView(this);
    auto *item = new QGraphicsPixmapItem(pixmap);
    auto *animation = new QVariantAnimation(this);

    view->setScene(new QGraphicsScene(this));
    view->setAlignment(Qt::AlignLeft | Qt::AlignTop);
    view->setSceneRect(0, 0, 300, 200);
    view->scene()->addItem(item);

    setCentralWidget(view);
    resize(302, 202);

    connect(animation, &QVariantAnimation::valueChanged, [view, item](){
        int x = item->x();

        if (x < (view->sceneRect().width() - item->pixmap().width()))
            item->setX(x + 1);
        else
            item->setX(0);
    });

    animation->setStartValue(0);
    animation->setEndValue(1000);
    animation->setDuration(10000);
    animation->start();
}

我准备的更全面的贪吃蛇游戏示例的代码可在GitHub上找到。


推荐阅读