有没有一种方法可以创建无限滚动的QImage?

问题描述

我正在使用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,m_background,m_height - m_offset,m_background.width(),m_height);
}

标题:

#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)

enter image description here)。

,

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