首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以流QGraphicsPixmapItem为背景

以流QGraphicsPixmapItem为背景
EN

Stack Overflow用户
提问于 2014-02-12 23:20:46
回答 1查看 539关注 0票数 0

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

代码语言:javascript
复制
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);
}

明显的问题是,项目消失了一段时间。我想在这段时间结束时重新渲染并保持场景的流畅性。我怎么能这么做?

我试着逐个像素地改变像素图,但是它太慢了。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 00:05:32

我建议对你的问题采取不同的办法:

例如,您可以有一个包含所有级别的大背景。诀窍是用视图的大小来扩展背景图像,用于高度固定的飞鸟:

代码语言:javascript
复制
background_width + screen_width

您可以在内存中以图像的形式构造这个扩展的背景。

然后,您可以使用您的图像导航:

代码语言:javascript
复制
void QPixmap::scroll ( int dx, int dy, const QRect & rect, QRegion * exposed = 0 )

并将QGraphicsPixmapItem像素映射设置为:

代码语言:javascript
复制
void QGraphicsPixmapItem::setPixmap ( const QPixmap & pixmap )

当你到达背景的末尾时,你只需在像素图的开头跳到相应的位置。

总之,QGraphicsPixmapItem从不移动,但是相应的QPixmap是从扩展的背景中提取出来的。

编辑:添加模式

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21742063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档