Qt移动应用开发:应用粒子特效

Qt移动应用开发:应用粒子特效

 

上一篇文章介绍了Qt Quick是怎样对帧动画进行支持的。帧动画的实现离不开状态机、而状态机、动画和状态切换(transitions)则是Qt框架的核心内容,也就是说它们可以建立在任何一个QObject对象中而不必非得依赖Qt的任何图形显示模块。拿一个例子说吧,如果你想实现背景音乐的平滑过渡,你可以不用写多余的代码,将背景音乐的音量作一下动画插值就可以达到效果了。事实上我制作的游戏《吃药了》就是这么实现效果的。而这一篇文章将要聚焦的是Qt Quick另外一个非常强大的系统——粒子系统。

原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/34114501

得益于Qt Quick对粒子系统的理解和抽象,我们可以使用粒子系统制作出很多强大的特效,虽然官方给出的例子只有2D的粒子,但是我们可以通过自定义顶点着色器和片断着色器来让它支持3D的例子特效。

下面是Qt自带的粒子系统演示程序截图:

\\

\

 

 

而制作一个这么美轮美奂的粒子系统效果也不难。接下来我们就创建一个简单的项目来看看:

 

01. import QtQuick 2.2
02. import QtQuick.Controls 1.1
03. import QtQuick.Particles 2.0
04.  
05. ApplicationWindow {
06. visible: true
07. width: 640
08. height: 480
09. title: qsTr("测试粒子系统")
10.  
11. menuBar: MenuBar {
12. Menu {
13. title: qsTr("文件")
14. MenuItem {
15. text: qsTr("退出")
16. onTriggered: Qt.quit();
17. }
18. }
19. }
20.  
21. ParticleSystem
22. {
23. anchors.centerIn: parent
24. ImageParticle
25. {
27. colorVariation: 1.0
28. }
29.  
30. Emitter
31. {
32. emitRate: 20
33. size: 10
34. lifeSpan: 4000
35. velocity: AngleDirection
36. {
37. magnitude: 100
38. angleVariation: 360
39. }
40. }
41. }
42.  
43. Text
44. {
45. anchors.right: parent.right
46. anchors.bottom: parent.bottom
47. text: qsTr("本例用来测试粒子系统")
48. }
49. }

程序的效果截图如下:

\

那么从上面的演示程序我们可以得知,一个粒子系统基本是由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来继续我们的实验。

 

01. ParticleSystem
02. {
03. anchors.centerIn: parent
04. ImageParticle
05. {
07. colorVariation: 1.0
08. }
09.  
10. Emitter
11. {
12. emitRate: 20
13. size: 10
14. lifeSpan: 4000
15. velocity: AngleDirection
16. {
17. magnitude: 100
18. angleVariation: 360
19. }
20. }
21.  
22. Gravity
23. {
24. angle: 90
25. magnitude: 100
26. }
27. }

演示程序的截图如下:

\

可以看到,通过指定Gravity的angle(下落的方向)以及magnitude(下落的加速度),我们可以在粒子运行中控制粒子的各类参数。

在我的独立游戏《吃药了》中也用到了各种粒子系统。比如说场景切换时候有大约6000个胶囊往右上角30度方向飞行;细菌和胶囊消除后会出现粉碎的特效;以及背景中胶囊浮空的特效,这些都用到了粒子效果。事实上好的粒子特效可以让玩家眼前一亮,也可以达到某种程度的快感。

\

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值