生活随笔
收集整理的這篇文章主要介紹了
QPropertyAnimation实现游戏地图场景变换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先我們先了解一下什么是QPropertyAnimation,先來看看它的官方解析。
官方解析 QPropertyAnimation
QPropertyAnimation類為Qt屬性提供動畫。
QPropertyAnimation類可以修改Qt屬性,從而達到動畫的效果。這些屬性的值存儲在QVariants中,所以QPropertyAnimation繼承了QvariantAnimation,并且支持他相同元類型的動畫,比如他的超類。
這個類必須是QObject的派生類。他必須經過一個設置才能使動畫效果成為可能(這樣的化QPropertyAnimation能夠設置屬性的值)。注意到這使得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的實例這屬性應該被傳遞給動畫的構造函數。然后你能指定這個屬性的開始和結束的指。當你自定義屬性的時候實現的效果也是一樣的,只要QVariant能支持,QVariantAnimation就能用。
QVariantAnimation類描述了如何去做一個動畫的細節。注意,如果start value沒有被設置,這個屬性會設置一個值,這個值是QPropertyAnimation實例化的時候創建的。
QpropertyAnimation工作的時候是充滿魅力的,要想完成一個復雜的動畫,要包含幾個對象實例,這里把他們放到QAnimationGroup中。一個動畫組也是一個動畫,這個動畫包含了許許多多的動畫。當組內的動畫運行時他能夠管理內部的小動畫,查看QParallelAnimationGroup這個例子可以看他如何使用以及管理。
實現游戲地圖場景變換
言歸正傳,我們還是來講解如何來實現游戲地圖背景的自動切換滾動,由于游戲地圖背景滾動屬于復雜的動畫,因此我們要結合QAnimationGroup來使用。
話不多說還是直接上代碼吧:
先添加頭文件
#include <QPropertyAnimation>
#include <QLabel>
#include <QParallelAnimationGroup>
在MyWidget.cpp的構造函數中添加
(注意setKeyValueAt的參數設置)
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);
結果展示:
總結
以上是生活随笔為你收集整理的QPropertyAnimation实现游戏地图场景变换的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。