Qt行動裝置 App開發(四):應用粒子特效

來源:互聯網
上載者:User

標籤:android   qt   行動裝置 App開發   遊戲   

Qt行動裝置 App開發(四):應用粒子特效

 

         上一篇文章介紹了Qt Quick是怎樣對幀動畫進行支援的。幀動畫的實現離不開狀態機器、而狀態機器、動畫和狀態切換(transitions)則是Qt架構的核心內容,也就是說它們可以建立在任何一個QObject對象中而不必非得依賴Qt的任何圖形顯示模組。拿一個例子說吧,如果你想實現背景音樂的平滑過渡,你可以不用寫多餘的代碼,將背景音樂的音量作一下動畫插值就可以達到效果了。事實上我製作的遊戲《吃藥了》就是這麼實現效果的。而這一篇文章將要聚焦的是Qt Quick另外一個非常強大的系統——粒子系統。

原創文章,反對未聲明的引用。原部落格地址:http://blog.csdn.net/gamesdev/article/details/34114501

         得益於Qt Quick對粒子系統的理解和抽象,我們可以使用粒子系統製作出很多強大的特效,雖然官方給出的例子只有2D的粒子,但是我們可以通過自訂頂點著色器和片斷著色器來讓它支援3D的例子特效。

         下面是Qt內建的粒子系統示範程式:


         而製作一個這麼美輪美奐的粒子系統效果也不難。接下來我們就建立一個簡單的項目來看看:

import QtQuick 2.2import QtQuick.Controls 1.1import QtQuick.Particles 2.0ApplicationWindow {    visible: true    width: 640    height: 480    title: qsTr("測試粒子系統")    menuBar: MenuBar {        Menu {            title: qsTr("檔案")            MenuItem {                text: qsTr("退出")                onTriggered: Qt.quit();            }        }    }    ParticleSystem    {        anchors.centerIn: parent        ImageParticle        {            source: "qrc:///particleresources/fuzzydot.png"            colorVariation: 1.0        }        Emitter        {            emitRate: 20            size: 10            lifeSpan: 4000            velocity: AngleDirection            {                magnitude: 100                angleVariation: 360            }        }    }    Text    {        anchors.right: parent.right        anchors.bottom: parent.bottom        text: qsTr("本例用來測試粒子系統")    }}

程式的效果如下:

那麼從上面的示範程式我們可以得知,一個粒子系統基本是由ParticleSystem、ImageParticle以及Emitter組成的。其中ParticleSystem必不可少,因為這是要控制好各個粒子系統組件的必備類型。如果ParticleSystem是不作為Emitter的父類存在的話,那麼Emitter有一個成員system必須要指定ParticleSystem的id。Emitter也是一個必不可少的類,它的作用是規定這些例子以何種方式發射、以及規定粒子的大小和生命週期。而ImageParticle是ParticlePainter的子類,它不是必備的,我們可以採用ParticlePainter的其它子類CustomParticle和ItemParticle來指定。它的作用是規定粒子的圖片以及旋轉、顏色、透明度等資訊。

         其實在三者之外,還有一個不可忽視的類,那就是Affector。一般來說,粒子在Emitter作用後會保持初始的速度、加速度和大小進行運動,此後這些數值不再受Emitter控制了,只有Affector才能控制粒子在運行過程中的數值大小。這裡Affector只是一個基類,在它的基礎上定義出來了很多根據不同效果而定義的子類。比如說Age、Attractor、Friction、Gravity、GroupGoal、SpriteGoal、Turbulence和Wander。這裡我們拿出一個簡單的Affector——Gravity來繼續我們的實驗。

ParticleSystem{    anchors.centerIn: parent    ImageParticle    {        source: "qrc:///particleresources/fuzzydot.png"        colorVariation: 1.0    }    Emitter    {        emitRate: 20        size: 10        lifeSpan: 4000        velocity: AngleDirection        {            magnitude: 100            angleVariation: 360        }    }    Gravity    {        angle: 90        magnitude: 100    }}

示範程式的如下:

可以看到,通過指定Gravity的angle(下落的方向)以及magnitude(下落的加速度),我們可以在粒子運行中控制粒子的各類參數。

在我的獨立遊戲《吃藥了》中也用到了各種粒子系統。比如說情境切換時候有大約6000個膠囊往右上方30度方向飛行;細菌和膠囊消除後會出現粉碎的特效;以及背景中膠囊浮空的特效,這些都用到了粒子效果。事實上好的粒子特效可以讓玩家眼前一亮,也可以達到某種程度的快感。

本文參加了CSDN博文大賽,請大家支援我,為我投一票!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.