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

上一篇文章介绍了Qt Quick是如何对帧动画进行支持的。帧动画的实现离不开状态机、而状态机、动画和状态切换(transitions)则是Qt框架的核心内容。也就是说它们能够建立在不论什么一个QObject对象中而不必非得依赖Qt的不论什么图形显示模块。拿一个样例说吧。假设你想实现背景音乐的平滑过渡,你能够不用写多余的代码。将背景音乐的音量作一下动画插值就能够达到效果了。其实我制作的游戏

recrefer=SE_D_%E5%90%83%E8%8D%AF%E4%BA%86#btn-install-now-log">《吃药了》就是这么实现效果的。

而这一篇文章将要聚焦的是Qt
Quick另外一个很强大的系统——粒子系统。

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

得益于Qt Quick对粒子系统的理解和抽象,我们能够使用粒子系统制作出非常多强大的特效,尽管官方给出的样例仅仅有2D的粒子,可是我们能够通过自己定义顶点着色器和片断着色器来让它支持3D的样例特效。

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

而制作一个这么美轮美奂的粒子系统效果也不难。

接下来我们就创建一个简单的项目来看看:

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Particles 2.0 ApplicationWindow {
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度方向飞行。细菌和胶囊消除后会出现粉碎的特效;以及背景中胶囊浮空的特效。这些都用到了粒子效果。

其实好的粒子特效能够让玩家眼前一亮。也能够达到某种程度的快感。

articleid=34114501">本文參加了CSDN博文大赛,请大家支持我。为我投一票!

Qt移动应用开发(四):应用粒子特效的更多相关文章

  1. 【Qt编程】基于Qt的词典开发系列<四>--无边框窗口的缩放与拖动

    在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词 ...

  2. 【Qt编程】基于Qt的词典开发系列<十四>自动补全功能

    最近写了一个查单词的类似有道词典的软件,里面就有一个自动补全功能(即当你输入一个字母时,就会出现几个候选项).这个自动补全功能十分常见,百度搜索关键词时就会出现.不过它们这些补全功能都是与你输入的进行 ...

  3. 【Unity 3D】学习笔记四十二:粒子特效

    粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起.来模拟火焰,爆炸.水滴,雾气等效果. 要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system就可 ...

  4. 快速全面了解QT软件界面开发技术

    快速全面了解QT软件界面开发技术     目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...

  5. Mask裁切UI粒子特效或者3D模型

    刚好前几天有人问我这个问题,再加上新项目也可能用,所以这两天就研究了一下.其实如果粒子特效 和3D模型 都用RenderTexture来做的话就不会有裁切的问题,但是粒子特效用RenderTextur ...

  6. 【Qt编程】基于Qt的词典开发系列<六>--界面美化设计

    本文讲一讲界面设计,作品要面向用户,界面设计的好坏直接影响到用户的体验.现在的窗口设计基本都是扁平化的,你可以从window XP与window 8的窗口可以明显感觉出来.当然除了窗口本身的效果,窗口 ...

  7. 【Qt编程】基于Qt的词典开发系列<二>--本地词典的设计

    我设计的词典不仅可以实现在线查单词,而且一个重大特色就是具有丰富的本地词典库:我默认加入了八个类型的词典,如下所示: 由于是本人是通信专业,因此加入了华为通信词典.电子工程词典,又由于我喜爱编程,也加 ...

  8. [原][粒子特效][spark]深入浅出osgSpark

    背景: 目前我使用的spark粒子特效库是2.0 这个库好像是原来鬼火引擎的一部分,需要从github上找 现在我要将其使用到我自己开发的基于osgearth开的三维地图引擎中 步骤: 1.编译spa ...

  9. Unity中的粒子特效的 RendererQ 排序

    这里接https://www.cnblogs.com/luguoshuai/p/10021660.html 这里介绍两套粒子排序的方法. 首先声明,这两套排序方法均不是本人所写,是在项目开发的过程当中 ...

随机推荐

  1. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)

    *题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) public class 第三十九题按条件计算 ...

  2. 打开VS2015提示“重新启动处于挂起状态。请在启动Visual Studio”之前重新启动

    昨晚安装了VS2015,今天打开VS2015提示[“重新启动处于挂起状态.请在启动Visual Studio”之前重新启动] 这里重新启动指的是重启电脑 解决方法: 电脑需要重启电脑

  3. C#中byte类型运算

    首先看下面一段代码 byte x = 1; byte y = 2; byte z = x + y; Console.WriteLine(z); 可能很多人会说显示结果是3. 其实,这段代码无法运行,因 ...

  4. c# xml本地化用法

    1.普通格式 2.占位符格式 注意事项: 1.Pascal命名法 2.key只是key,中间不需要空格,value可以空格 3.占位符左右两边分别空一格

  5. 5.1 qbxt 一测 T1

    禁咒检验 (3MB / 2s)[问题描述] 在古老的世界里,有一个神奇的职业叫做魔法师. 魔法师的特点是会魔法,施放魔法需要念咒语. 在古老的世界里,有一个神奇的职业叫做码农.码农的工作是帮助魔法师记 ...

  6. Python3使用PyMySQL操作数据库

    1. 安装PyMySQL pip install PyMySQL 关于PyMySQL的详细内容可以查看官方文档  Github 2. 创建表 在某个数据库内,使用以下指令建表 CREATE TABLE ...

  7. Navicat Premium 12破解(转载)

    一.Navicat Premium 12下载 Navicat Premium 12是一套数据库开发管理工具,支持连接 MySQL.Oracle等多种数据库,可以快速轻松地创建.管理和维护数据库. Na ...

  8. 专访Vue作者尤雨溪:Vue CLI 3.0重构的原因

    1.为什么要对 Vue CLI 进行大规模修改? 尤雨溪认为旧版本的 Vue CLI 本质上只是从 GitHub 拉取模版,这种拉模版的方式有几个问题: (1) 在单个模版里面同时支持太多选项会导致模 ...

  9. 南邮CTF--SQL注入题

    南邮CTF--SQL注入题 题目:GBK SQL injection 解析: 1.判断注入点:加入单引号发现被反斜杠转移掉了,换一个,看清题目,GBK,接下来利用宽字节进行注入 2.使用'%df' ' ...

  10. [Android]使用button切换TextView可见和不可见

    <Button android:id="@+id/btnTest" android:layout_width="match_parent" android ...