流动的QGraphicsPixmapItem作为背景

时间:2014-02-12 23:20:47

标签: qt qgraphicsitem qpixmap

我正在尝试为我的场景实现流动的背景项目(就像飞鸟一样)

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);
}

明显的问题是,一段时间后项目消失了。我希望在句号结束时重新渲染并保持场景的流动。我怎么能这样做?

我试图逐像素地更改像素图项目,但它太慢了。

提前致谢

1 个答案:

答案 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是从扩展背景中提取的。

编辑:添加了架构 Scheme