QML文字灰飞烟灭效果

1,目的

实现文字化作一缕青烟随风而逝的效果。

2,设计分析

在前面的章节中讲述了如何化作光斑碎片逐渐消失的效果,我们可以借鉴它将光斑换成烟雾,再加入端流产生微风浮动,加上字幕的减淡消失,最终组合成文字化作一缕青烟随风而逝的效果。

3,设计内容

我们先来看看效果

图1

首先创建一个480*240的窗口,背景色设置为深灰黑#1f1f1f,文字配置居中、白色、粗体、微软雅黑、64号。

import QtQuick 2.4
import QtQuick.Window 2.2 Window {
visible: true width: 480
height: 240 Rectangle {
id: root
anchors.fill: parent
color: "#1f1f1f" Text {
id:myText
anchors.centerIn: parent
text: "Hello world!"
font.bold: true
font.pixelSize: 64
font.family: "微软雅黑"
color: "#ffffffff"
opacity: 1;
}
}
}

图2

然后添加粒子系统的三个重要组成:ParticleSystem、ImageParticle、Emitter。及粒子系统的引用文件QtQuick.Particles。其中ImageParticle使用外发光光斑,颜色使用#30333333,这里颜色由4个8位16进制数组成分别对应A:0x30 R:0x33 G:0x33 B:0x33。表示30%的灰色模仿烟雾的颜色。

 QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Particles 2.0 Window {
visible: true width: 480
height: 240 Rectangle {
id: root
anchors.fill: parent
color: "#1f1f1f" Text {
id:myText
anchors.centerIn: parent
text: "Hello world!"
font.bold: true
font.pixelSize: 64
font.family: "微软雅黑"
color: "#ffffffff"
opacity: 1;
} ParticleSystem {
id: myParticleSystem
} ImageParticle {
system: myParticleSystem source: "qrc:///particleresources/glowdot.png"
color: "#30333333"
}
Emitter {
id: myEmitter
system: myParticleSystem
anchors.fill: myText lifeSpan: 1000
emitRate: 4000
size: 16
sizeVariation: 8
endSize: 8
}
}
}

图3

现在烟雾环绕的状态已经完成,但是过于古板,而且烟雾区域超出文本区域。下面我们减小一半烟雾区域,并且对烟雾添加和水平45°升空的效果。
修改Emitter

Emitter {
id: myEmitter
system: myParticleSystem width: myText.width
height: myText.height / 2
anchors.left: myText.left
y: root.height / 2 - 12 lifeSpan: 1000
emitRate: 4000
size: 16
sizeVariation: 8
endSize: 8 velocity: PointDirection {
y: -48
x: 48
xVariation: 32
yVariation: 32
}
}

图4

现在烟雾不够自然,我们再增加点空气乱流吹散它,增加Turbulence效果

Turbulence {
id: myTurb
enabled: true
anchors.fill: root
strength: 128
system: myParticleSystem
}

图5

我们让文本逐渐消失,并且在完全消失的瞬间停止粒子发射器发射,在粒子停止发射后已发射粒子会在生命周期结束后消失。我们需要用到SequentialAnimation顺序动画和ParallelAnimation进行组合完成。
动画的流程:在1秒内粒子发生器范围从0到4000,与此同时文字透明度降低到0.9,然后1秒时间内文字透明度降低到0,当透明度等于0时停止粒子发射器发射。最后为了方便演示增加鼠标触发效果,在触发效果之前先让显示内容的属性重置到初始状态。
最终代码如下

import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Particles 2.0 Window {
visible: true width: 480
height: 240 Rectangle {
id: root
anchors.fill: parent
color: "#1f1f1f" Text {
id:myText
anchors.centerIn: parent
text: "Hello world!"
font.bold: true
font.pixelSize: 64
font.family: "微软雅黑"
color: "#ffffffff"
opacity: 1;
} ParticleSystem {
id: myParticleSystem
} ImageParticle {
system: myParticleSystem source: "qrc:///particleresources/glowdot.png"
color: "#30333333"
}
Emitter {
id: myEmitter
system: myParticleSystem
enabled: false width: myText.width
height: myText.height / 2
anchors.left: myText.left
y: root.height / 2 - 12 lifeSpan: 1000
lifeSpanVariation: 500
emitRate: 4000
size: 16
sizeVariation: 8
endSize: 8 velocity: PointDirection {
y: -48
x: 48
xVariation: 32
yVariation: 32
}
} Turbulence {
id: myTurb
enabled: true
anchors.fill: root
strength: 128
system: myParticleSystem
} SequentialAnimation{
id: myAnimation ParallelAnimation {
PropertyAnimation {
target: myEmitter
properties: "emitRate"
from: 0
to: 4000
duration: 1000
} PropertyAnimation {
target: myText
properties: "opacity"
to: 0.9
duration: 1000
}
} //数值动画
PropertyAnimation {
target: myText
properties: "opacity"
to: 0.0
duration: 1000
} onStopped: myEmitter.enabled = false
} MouseArea {
anchors.fill: parent onClicked: {
myEmitter.enabled = true
myText.opacity = 1
myEmitter.emitRate = 4000
myAnimation.restart()
}
}
}
}

4,总结

对于一些飘散效果,重点是飘散主体的消失和飘散散落的过程,只要把握好了这一点配合就能让整个过程很自然。下来大家也可以优化上述代码达到更加真实的效果,可以在简书、博客园、或邮箱将问题进行留言,我会及时修正和更新。
邮箱: whqcxz@163.com

原创:https://www.simbahiker.com/news/0220200508001.html

QML文字灰飞烟灭效果的更多相关文章

  1. JS 黑客帝国文字下落效果

    黑客帝国文字下落效果 源代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  2. 仿知乎/途家导航栏渐变文字动画效果-b

    demo.gif 效果图如上,简单分析下 1.导航栏一开始是隐藏的,随着scrollView滚动而渐变 2.导航栏左右两边的navigationItem是一直显示的 3.导航栏参考了途家app,使用了 ...

  3. (转)css中通常会用到浮动与清除,也是一个必须掌握的知识点,概念性的东西不多说,下面举几个例子,来说明它的用法:1.文字环绕效果 2.多个div并排显示 3.清除浮动(默认显示)

    一.文字环绕效果: html代码如下: 1 <body> 2 3 <style type="text/css"> 4 #big img {float: le ...

  4. HTML5 Placeholder实现input背景文字提示效果

    这篇文章我们来看看什么是input输入框背景文字提示效果,如下图所示: 这种效果现在网上非常的普遍流行,但大部分是使用JavaScript实现的.但HTML5给我们提供了新的纯HTML的实现方式,不需 ...

  5. Flash 开发环境搭建和文字滚动效果实例

    Flash 开发环境搭建和文字滚动效果实例 一.Flash 开发环境搭建 Flash发布的时候可以将资源(即将库中的元件)集成到swf运行文件中.Flash没有代码自动输入补全功能,因此需要一个英文一 ...

  6. php生成文字图片效果

    php生成文字图片效果最近看到php的GD功能,试着做了一个基本生成文字图片效果的代码: 显示文字图片页面:demo.php<?php$str = $_REQUEST['str'] ? $_RE ...

  7. CSS环绕球体的旋转文字-3D效果

    代码地址如下:http://www.demodashi.com/demo/12482.html 项目文件结构截图 只需要一个html文件既可: 项目截图: 代码实现原理: 该示例的实现过程很简单,主要 ...

  8. WPF图形/文字特别效果之一:交叉效果探讨(续)

    原文:WPF图形/文字特别效果之一:交叉效果探讨(续) 在"WPF图形/文字特别效果之一:交叉效果探讨"(http://blog.csdn.net/johnsuna/archive ...

  9. WPF图形/文字特别效果之一:交叉效果探讨

    原文:WPF图形/文字特别效果之一:交叉效果探讨 为了说明问题,先看下图:图1  完全重叠的单一颜色文字它是2008几个字的叠加,并且颜色为单一的红色.如果不仔细分辨,你或许无法一下子看出是2008. ...

随机推荐

  1. Python 注释(Python Comments)用法详解

    目录 1 Python 注释概述 2 Python 注释的作用 2.1 调试代码 2.2 提高程序的可读性 3 Python 单行注释 3.1 Python 单行注释概述 3.2 单行注释注释单行代码 ...

  2. 小程序—银行、券商们下一代APP的进阶方向

    传统金融机构们的App——尤其以手机银行.手机证券为最,发展到今天,已经产生一系列的问题:从用户角度看,体验普遍不好.高度同质化:从业务运营角度看,几乎没有什么“运营”的抓手:从IT角度看,投入产出比 ...

  3. 给我Python几十行代码,我还你一个微信聊天助手

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 故事胶片 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  4. 把川普射上太阳—如何用python制作小游戏

    1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装. Windows环境下打开Cmd(开始—运行—CMD),苹果系统 ...

  5. 数据结构与算法--树(tree)结构

    树 二叉树 遍历原则:前序遍历是根左右, 中序遍历是左根右,后序遍历是左右根. 二叉搜索树 特点:对于树中的每个节点X,它的左子树中所有节点的值都小于X,右子树中所有节点的值都大于X. 遍历:采取二叉 ...

  6. 在vue中使用ztree树插件

    插件资源及api:树官网 本事例是在vue3.0+中演示,事例是实际项目中正在用的组件所以部分打了马赛克. 1.插件准备(提前准备好插件文件) 可以直接在官网下载,搭建好脚手架后将准备好的文件放在li ...

  7. springmvc配置数据源方式

    1 阿里巴巴的druid数据源 <!-- 配置数据源 使用的是Druid数据源 -->-<bean destroy-method="close" init-met ...

  8. php phpStudy session存放位置

    如果你仅仅是想知道session保存的文件在哪里,你可以在你的PHP文件当中运行函数:session_save_path之后查看运行结果即可知道session文件的存放目录. 或者: 在php-ini ...

  9. Python不同版本打包程序为.exe文件

    安装pyinstaller 测试用的python环境是3.6.2版本 下载地址 https://github.com/pyinstaller/pyinstaller/ 1.打开cmd,切到pyinst ...

  10. python教程(目录)

    很早就想出一套python的零基础入门教程,各种原因一直没动手.今天立个flag,2020年一定完成这个目标. 入门篇 完全零基础的小白应该从这里看起. 一.计算机原理 这里不是要让大家去深入的学习计 ...