有没有办法创建一个无限滚动的图像?

Is there a way to create a QImage that scrolls infintely?

我正在使用 QT 创建这个游戏:https://www.friv.com/z/games/killcovid19/game.html?Desktop-x-x-w-x-x-xx

在玩游戏的时候,你可以看到红色的背景在游戏中无限滚动。我正在考虑创建一个执行此操作的 QT 图像,但我不确定如何做。有没有办法使用 QImage 使其工作?有更简单的方法吗?

我能想到的最简单的方法是创建一个比视口大的图像(例如,其高度的两倍)并具有重复图案。开始滚动它,当它到达末尾时,从头开始滚动。

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , m_background("pattern2.jpg")
    , m_timer(new QTimer(this))
    , m_offset(0)
    , m_height(m_background.height() / 2)
{
    connect(m_timer, &QTimer::timeout, [this]
    {
        m_offset += 2;

        if (m_offset >= m_height)
            m_offset = 0;

        update();
    });

    resize(m_background.width(), m_height);
    m_timer->start(16);
}

Widget::~Widget()
{}

void Widget::paintEvent(QPaintEvent*)
{
    QPainter p(this);
    p.drawPixmap(0, 0, m_background, 0, m_height - m_offset, m_background.width(), m_height);
}

Header:

#pragma once

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:
    void paintEvent(QPaintEvent* event) override;

private:
    QPixmap m_background;
    QTimer* m_timer;
    int m_offset;
    int m_height;
};

我使用 QPixmap 而不是 QImage,因为它是为在屏幕上显示图像而设计和优化的(与针对 I/O 优化的 QImage 不同)

).

一张QImage就像一张长方形的照片,因为它有边,而且不是无限的。但是复制它是“免费的”。想想你如何实现一个物理的无限滚动图像(即你可以拿在手里的东西,而不是你脑子里的想法),然后应该清楚如何使用 QImage 来实现它,我希望:)