【问题标题】:Flowing QGraphicsPixmapItem as background流动的 QGraphicsPixmapItem 作为背景
【发布时间】:2014-03-11 14:42:09
【问题描述】:

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

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

明显的问题是,物品会在一段时间后消失。我想在周期结束时重新渲染并保持场景的流动。我怎么能这样做?

我尝试逐像素更改像素图项,但速度太慢了。

提前致谢

【问题讨论】:

    标签: qt qgraphicsitem qpixmap


    【解决方案1】:

    我提出了一种不同的方法来解决您的问题:

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

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

    编辑:添加架构

    【讨论】:

    • 你能提供一个工作示例或更清晰的解释吗,我正在玩滚动没有运气。
    • 请查看架构
    猜你喜欢
    • 2016-07-21
    • 2021-12-18
    • 1970-01-01
    • 2019-12-10
    • 2019-02-21
    • 1970-01-01
    • 2012-06-19
    • 2016-10-01
    • 1970-01-01
    相关资源
    最近更新 更多