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

來源:互聯網
上載者:User

標籤:ext   qt quick   sprite   數值   ima   檔案   resource   eva      

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博文大賽,請大家支援我。為我投一票!

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.