Как анимировать 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 );
}