有没有办法创建一个无限滚动的图像?
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
来实现它,我希望:)
我正在使用 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
来实现它,我希望:)