c++ - 如何将到达图形视图右侧(末端)的 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上找到。
推荐阅读
- pandas - 如何从熊猫中删除作为str输入的年份的月份?
- javascript - React Native——如何编辑动态生成的 TextInput 字段的值?
- json - JQ 将 json 数组转换为对象属性
- amazon-dynamodb - 在分页查询循环中删除 DynamoDB 项目
- javascript - guildBanAdd 无法读取未定义的属性“id”
- javascript - 数据表导出到 Excel 按钮并不总是显示
- xslt-2.0 - XSLT 2.0 需要为每位员工输出最多 10 条记录
- ruby - 如何在 Rails 6 中更新 @model.submodel
- javascript - 从参数中的对象中删除属性与从对象中删除属性
- c# - 在 xamarin.forms (ios) 中启动演示应用程序时出错