我正在尝试为我的场景实现流动的背景项目(就像飞鸟一样)
Form::Form(QWidget *parent) : QMainWindow(parent), ui(new Ui::Form)
{
ui->setupUi(this);
showMaximized();
background = new QGraphicsPixmapItem();
background->setPixmap(QPixmap::fromImage(QImage("..//Game//images//background.jpg")));
scene = new QGraphicsScene();
ui->view->setScene(scene);
scene->addItem(background);
timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(timerTick()));
timer->start(1);
}
// ...
void Form::timerTick()
{
background->moveBy(-0.2, 0);
}
明显的问题是,一段时间后项目消失了。我希望在句号结束时重新渲染并保持场景的流动。我怎么能这样做?
我试图逐像素地更改像素图项目,但它太慢了。
提前致谢
答案 0 :(得分:0)
我提出了一个解决问题的方法:
例如,您可以拥有一个包含所有级别的大背景。诀窍是扩展背景图像的视图大小,适用于高度固定的飞鸟:
background_width + screen_width
您可以在图像的内存中构建此扩展背景。
然后您可以用来导航图片:
void QPixmap::scroll ( int dx, int dy, const QRect & rect, QRegion * exposed = 0 )
并将QGraphicsPixmapItem像素图设置为:
void QGraphicsPixmapItem::setPixmap ( const QPixmap & pixmap )
当你到达背景的末尾时,你只需跳到像素图开头的相应位置。
总之,您的QGraphicsPixmapItem永远不会移动,但相应的QPixmap是从扩展背景中提取的。
编辑:添加了架构