生活随笔
收集整理的這篇文章主要介紹了
QPropertyAnimation实现游戏地图场景变换
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先我們先了解一下什么是QPropertyAnimation,先來看看它的官方解析。
官方解析 QPropertyAnimation
QPropertyAnimation類為Qt屬性提供動畫。
QPropertyAnimation類可以修改Qt屬性,從而達到動畫的效果。這些屬性的值存儲在QVariants中,所以QPropertyAnimation繼承了QvariantAnimation,并且支持他相同元類型的動畫,比如他的超類。
這個類必須是QObject的派生類。他必須經(jīng)過一個設(shè)置才能使動畫效果成為可能(這樣的化QPropertyAnimation能夠設(shè)置屬性的值)。注意到這使得Qt小部件(窗口)都能做出動畫的形式。舉個例子:
QPropertyAnimation
*animation
= new QPropertyAnimation(myWidget
, "geometry");animation
->setDuration(10000);animation
->setStartValue(QRect(0, 0, 100, 30));animation
->setEndValue(QRect(250, 250, 100, 30));animation
->start();
屬性名和QObject的實例這屬性應(yīng)該被傳遞給動畫的構(gòu)造函數(shù)。然后你能指定這個屬性的開始和結(jié)束的指。當(dāng)你自定義屬性的時候?qū)崿F(xiàn)的效果也是一樣的,只要QVariant能支持,QVariantAnimation就能用。
QVariantAnimation類描述了如何去做一個動畫的細節(jié)。注意,如果start value沒有被設(shè)置,這個屬性會設(shè)置一個值,這個值是QPropertyAnimation實例化的時候創(chuàng)建的。
QpropertyAnimation工作的時候是充滿魅力的,要想完成一個復(fù)雜的動畫,要包含幾個對象實例,這里把他們放到QAnimationGroup中。一個動畫組也是一個動畫,這個動畫包含了許許多多的動畫。當(dāng)組內(nèi)的動畫運行時他能夠管理內(nèi)部的小動畫,查看QParallelAnimationGroup這個例子可以看他如何使用以及管理。
實現(xiàn)游戲地圖場景變換
言歸正傳,我們還是來講解如何來實現(xiàn)游戲地圖背景的自動切換滾動,由于游戲地圖背景滾動屬于復(fù)雜的動畫,因此我們要結(jié)合QAnimationGroup來使用。
話不多說還是直接上代碼吧:
先添加頭文件
#include <QPropertyAnimation>
#include <QLabel>
#include <QParallelAnimationGroup>
在MyWidget.cpp的構(gòu)造函數(shù)中添加
(注意setKeyValueAt的參數(shù)設(shè)置)
this->setFixedSize(800,600);
QLabel
* Label1
= new QLabel(this);
Label1
->setStyleSheet("QLabel{border-image:url(:/img/img/seaworld1.png);}");
QLabel
* Label2
= new QLabel(this);
Label2
->setStyleSheet("QLabel{border-image:url(:/img/img/seaworld2.png);}");
QLabel
* Label3
= new QLabel(this);
Label3
->setStyleSheet("QLabel{border-image:url(:/img/img/seaworld1.png);}");QPropertyAnimation
* animation1
= new QPropertyAnimation(Label1
, "geometry",this);
animation1
->setDuration(8000);
animation1
->setKeyValueAt(0,QRect(0,0,800,600));
animation1
->setKeyValueAt(1,QRect(-1600,0,800,600));QPropertyAnimation
* animation2
= new QPropertyAnimation(Label2
, "geometry",this);
animation2
->setDuration(8000);
animation2
->setKeyValueAt(0,QRect(800,0,800,600));
animation2
->setKeyValueAt(1,QRect(-800,0,800,600));QPropertyAnimation
* animation3
= new QPropertyAnimation(Label3
, "geometry",this);
animation3
->setDuration(8000);
animation3
->setKeyValueAt(0,QRect(1600,0,800,600));
animation3
->setKeyValueAt(1,QRect(0,0,800,600));QParallelAnimationGroup
* group_1
= new QParallelAnimationGroup
;
group_1
->addAnimation(animation1
);
group_1
->addAnimation(animation2
);
group_1
->addAnimation(animation3
);
group_1
->start();
group_1
->setLoopCount(-1);
結(jié)果展示:
總結(jié)
以上是生活随笔為你收集整理的QPropertyAnimation实现游戏地图场景变换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。