2014-06-25 2 views
0

가능한 경우 QPixmap을 애니메이션으로 만듭니다. 내 프로그램에서 QPixmap (슈퍼 마리오의 이미지)이 있습니다 .i는 it.i를 앞으로 움직여야하고 점프해야한다는 것을 의미합니다. 다시 슈퍼 마리오의 모양을 디자인하기가 어렵습니다. 이미지의 사용을 선호합니다.qt에서 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

각 애니메이션 프레임마다 하나씩 여러 이미지가 필요합니다. 그런 다음 픽스맵을 애니메이션 (QTimer 및/또는 가정)으로 바꿔 애니메이션을 완성하십시오. – hyde

답변

2

스프라이트 시트와 동일한 기능을하는 코드가 있습니다. 그것은 기본적으로, 당신은

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

및 타이머, 당신은 스프라이트의 위치를 ​​변경 스프라이트

의 크기와 위치에 그림을 그려 here

을 설명했다.

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); 
} 
관련 문제