我正试图为我的场景实现一个流动的背景项目(就像飞鸟一样)
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);
}明显的问题是,项目消失了一段时间。我想在这段时间结束时重新渲染并保持场景的流畅性。我怎么能这么做?
我试着逐个像素地改变像素图,但是它太慢了。
提前感谢
发布于 2014-02-13 00:05:32
我建议对你的问题采取不同的办法:
例如,您可以有一个包含所有级别的大背景。诀窍是用视图的大小来扩展背景图像,用于高度固定的飞鸟:
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是从扩展的背景中提取出来的。
编辑:添加模式

https://stackoverflow.com/questions/21742063
复制相似问题