Текущий QGraphicsPixmapItem в качестве фона

Я пытаюсь реализовать плавный фоновый элемент для моей сцены (так же, как flappy bird)

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

Очевидная проблема в том, что предмет исчезает через некоторое время. Я хочу перерисовать и поддерживать поток сцены, когда период заканчивается. Как я мог это сделать?

Я пытался изменить пиксель элемент изображения за пикселем, но это было слишком медленно.

заранее спасибо

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 извлекается из расширенного фона.

Изменить: добавлена ​​схемаСхема

Другие вопросы по тегам