Qt移動應用開發(二):使用動畫框架

Qt移動應用開發(二):使用動畫框架css

 

         上一篇博客介紹了怎樣使用Qt的QML來對屏幕分辨率大小進行適應,其實,不一樣分辨率的適應是一個很棘手的問題,除了分辨率不一樣外,寬高比(aspect ratio)也不盡一樣。html

有些平板在硬件上作得和IPad同樣是Retina屏(2048×1536),有些低端的手機分辨率僅僅有320×480。這樣寬高比又不同了。因此在設計App的過程必定要對內容佈局有所規劃。採用錨佈局的方法可以幫咱們解決必定的問題,同一時候也要善用Screen類的成員來得到系統分辨率的不少其它信息。框架

         這篇文章主要介紹的是QtQuick的動畫框架。oop

Qt Quick動畫框架自從Qt4的時代就有了,當時也有很是多的demo給咱們眼前一亮。佈局

脫胎於C++的動畫框架。Qt Quick的動畫框架絢麗並且易用。很是值得學習。post

原創文章。反對未聲明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/32730079學習

         首先介紹一下與動畫框架相關的幾個類:動畫

Animation是這些類的基類。它具備這幾個屬性:ui

alwaysRunToEnd : bool
loops : int
paused : bool
running : bool

後三個屬性很好理解。第一個解釋一下,假設設爲true,那麼無論動畫是否結束,他都會讓動畫完畢最後一輪播放。設爲false,那麼一旦動畫結束。那麼動畫立刻結束。spa

Animation有很是多子類。包含AnchorAnimation、ParallelAnimation、ParentAnimation、PathAnimation、PauseAnimation、PropertyAction、PropertyAnimation、ScriptAction、和 SequentialAnimation。咱們在實際應用中。通常單個動畫會使用PropertyAnimation的子類ColorAnimation、NumberAnimation、RotationAnimation和Vector3dAnimation,如下是一個簡單的樣例:

NumberAnimation on x { from: 0;to: 100; duration: 1000 }

如上面樣例所看到的,PropertyAnimation如下的子類靈活多樣。有多種語法存在形式,常常和介詞on以及短語Behavior on連用。上面的樣例表示介詞on左邊的動畫類型必定要和右邊的屬性類型相應。假設要對一個vector3d的變量應用介詞on。那麼應該這麼寫:

Vector3dAnimation on position { from: Qt.vector3d( 0, 0, 0 ); to Qt.vector3d( 1, 1, 1 ); duration: 1000 }

Behavior on和on的差異在於Behavioron是提供了默認的動畫操做。即Behavior裏面可以描寫敘述默認的動畫:

Behavior on width
{
        NumberAnimation { duration: 1000 }
}

但多是Qt Quick動畫這一塊不無缺吧,有的時候在不一樣的平臺上表現會有所不一樣,有時Behavior不工做。有時卻又是好的(問題描寫敘述)。

當Behavior遇到了狀態轉換(transition)時,Behavior會被覆蓋。詳情請參閱Qt的相關文檔。

你們看到我製做的遊戲三個細菌和膠囊是一直從左往右移動的,並且是循環的,這裏展現一下代碼:

Image
{
         id:animateCapsule
         height:parent.width / 10
         width:height / 2
         propertyint xFrom: parent.width + height * 8
         propertyint xTo: -height * 2
         x:xFrom
         y:parent.height * 0.45
         source:"../../images/capsule.png"
 
         RotationAnimation on rotation
         {
                   from:0
                   to:360
                   loops:Animation.Infinite
                   duration:2000
         }
 
         //@桌面:請注意使用這一段代碼
         Behavioron x
         {
                   NumberAnimation
                   {
                            from:animateCapsule.xFrom
                            to:animateCapsule.xTo
                            loops:Animation.Infinite
                            duration:2000
                   }
         }
}

本文參加了CSDN博文大賽。請你們支持我,爲我投一票!

相關文章
相關標籤/搜索