我正在使用QT创建游戏:https://www.friv.com/z/games/killcovid19/game.html?Desktop-x-x-w-x-x-xx
在玩游戏时,您会看到红色背景在游戏中无限滚动。我当时正在考虑创建一个执行此操作的QT图像,但不确定如何操作。有没有办法使用QImage来工作?有没有更简单的方法?
答案 0 :(得分:0)
我能想到的最简单的方法是使用重复图案创建一个大于视口的图像(例如,其视口的两倍)。开始滚动,直到到达末尾,从头开始滚动。
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);
}
标题:
#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)
答案 1 :(得分:0)
QImage
就像一张矩形照片,因为它有边并且不是无限的。但是复制它是“免费的”。考虑一下如何实现物理无限滚动的图像(即,可以拿在手中的东西,而不是头脑中的想法),然后应该很清楚如何使用QImage
来实现它,我希望:)