Как анимировать QPixmap в QT?

Если возможно анимировать QPixmap? в моей программе у меня есть QPixmap (изображение супер Марио). я хочу его анимировать. я имею в виду, что он должен идти вперед и прыгать. мне сложно снова придумать форму супер Марио и предпочесть использование изображения.

#ifndef MYQGRAPHICOBJECT_H
#define MYQGRAPHICOBJECT_H
#include <QGraphicsObject>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QPixmap>
#include <QPropertyAnimation>
extern QPixmap super;
class MyQgraphicObject : public QGraphicsObject
{
Q_OBJECT
private:
 QPropertyAnimation* pro;
 QPixmap pi;
 public:
explicit MyQGraphicObject(QGraphicsItem *parent = 0,QPixmap p= super);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
QRectF boundingRect()const;
signals:
public slots:   
};
#endif // MYQGRAPHICOBJECT_H
#include "myqgraphicobject.h"
#include <QGraphicsItem>
MyQGraphicObject::MyQGraphicObject(QGraphicsItem *parent, QPixmap p) :
QGraphicsObject(parent),pi(p)
{
 pro=new QPropertyAnimation();
}
QRectF MyQGraphicObject::boundingRect() const
{
}

1 ответ

Решение

У меня есть код, который делает то же самое со спрайтовым листом. Это объясняется здесь

По сути, вы рисуете картинку с размером и расположением спрайта

mSpriteImage = new QPixmap(":dragon.png");
painter->drawPixmap ( mPos.x(),mPos.y(), *mSpriteImage, 
                                   mCurrentFrame, 0, 100,100 );

и по таймеру вы меняете местоположение спрайта.

void Sprite::nextFrame()
{
    //following variable keeps track which 
    //frame to show from sprite sheet
    mCurrentFrame += 100;
    if (mCurrentFrame >= 500 )
        mCurrentFrame = 0;
    mPos.setX( mPos.x() + 10 );
}
Другие вопросы по тегам