如何将到达图形视图右侧(末端)的QGraphicsPixmapItem移动到左侧(开始)侧(就像在贪吃蛇游戏中发生的事情



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

解决方案

设置像素图的位置时,检查它是否小于场景矩形的宽度-像素图的宽度,如果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 上找到。

最新更新