如何将到达图形视图右侧(末端)的 QGraphicsPixmapItem 移动到左侧(开始)侧(就像蛇游戏中发生的事情)
Posted
技术标签:
【中文标题】如何将到达图形视图右侧(末端)的 QGraphicsPixmapItem 移动到左侧(开始)侧(就像蛇游戏中发生的事情)【英文标题】:How can I move a QGraphicsPixmapItem that reachs the right (end) of graphicView to the left (begining) side(like what is happening in the snake game) 【发布时间】:2018-09-25 03:11:22 【问题描述】:我有一个显示像素图项目的 QGraphicsView 小部件。用户可以移动项目。当项目到达图形视图的右(或左)端时,我希望项目从另一侧进入(具有相同的 X 和 Y 坐标(就像蛇游戏中发生的那样)
【问题讨论】:
您需要在像素图项目上调用 setPos() 并使用您要将其移动到的坐标。 抱歉,我的意思不是移动 pixmapItem! 【参考方案1】:解决方案
在设置像素图的位置时,检查它是否小于scene rectangle的宽度 - 像素图的宽度,如果是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 上找到。
【讨论】:
@Abalfazl Moridi,你试过这个吗? 我想把从左边到右边的部分图像只输入到左边的一部分。以上是关于如何将到达图形视图右侧(末端)的 QGraphicsPixmapItem 移动到左侧(开始)侧(就像蛇游戏中发生的事情)的主要内容,如果未能解决你的问题,请参考以下文章