一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 4 天,点击查看活动详情。
📒博客首页:何名取 的个人主页 - 文章 - 掘金 (juejin.cn)
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❤️ 期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!
Emitter简介
发射器Emitter类型向粒子系统中发射逻辑粒子。这些粒子从发射器的位置发射,包含轨迹和寿命,但并没有可视化外观。
发射器会使用指定的初始化属性来发射逻辑粒子,并且至少需要一个渲染器ParticlePainter类型来使其可视化。在粒子寿命的任意时刻都可以使用影响器Affector类型来修改指定的属性,包括寿命lifespan属性。
另外,还有一个TrailEmitters类型,它是一种特殊类型的发射器,可以从其他逻辑粒子的位置发射粒子,该类型会在后面的内容中详细介绍。
Emitter类型属性
属性 | 类型 | 描述 |
---|---|---|
acceleration | StochasticDirection | 发射的粒子的起始加速度。 |
emitRate | real | 每秒发射的粒子数。 默认值是10个粒子每秒。 |
enabled | bool | 如果设置为false,发射器将停止发射,直到它被设置为true。 默认值为true。 |
endSize | real | 粒子在生命末期的像素大小。大小将在粒子的生命周期内从这个值和size线性插值。如果endSize为-1,则粒子的大小将在初始大小时保持不变。 默认值是-1。 |
group | string | 这是它将发射进去的逻辑粒子群。 默认值为""(空字符串)。 |
lifeSpan | int | 以毫秒为单位的每个发射粒子的时间应该持续。 如果你不希望粒子在一段时间后自动死亡,例如你希望手动处理它们,将lifeSpan设置为Emitter.InfiniteLife。(无穷大) 超过或等于600000(10分钟)的寿命将被视为无限。寿命小于或等于0的粒子一开始是死亡的。 默认值是1000(1秒)。 |
lifeSpanVariation | int | 粒子的寿命无论在哪个方向上都会相差这么多。 默认值为0。 |
maximumEmitted | int | 发射体在同一时间内能够存活的最大粒子数。 这可以设置为性能优化(当使用突发和脉冲时)或交错排放。 如果这个数值设置为0以下,那么这个发射器可以有活粒子的数量就没有最大限制。 默认值为-1。 |
shape | Shape | 这个形状应用于发射器的大小。粒子将从该形状覆盖的任何区域随机发射。 默认形状是一个填充的矩形,它对应于发射器的完整边界框。 |
size | real | 粒子的大小,以像素为单位在它们的生命之初。 默认值是16。 |
sizeVariation | real | 粒子的大小可以从size/endSize上下变化这么多。对单个粒子的size和endSize进行相同的随机添加。 默认值为0。 |
startTime | int | 如果这个值是在发射器加载时设置的,那么它将从过去发射粒子,直到startTime毫秒以前。这些将模拟如果他们当时发射,但不会有任何影响应用到他们。影响者将从现在起生效。 |
system | ParticleSystem | 这是发射器将发射到的粒子系统。如果发射器是ParticleSystem的直接子元素,这可以省略。 |
velocity | StochasticDirection | 粒子发射的起始速度。 |
velocityFromMovement | qreal | 如果这个值是非零,那么发射器的任何运动都会根据运动为粒子提供额外的开始速度。额外的矢量将与发射器的运动相同的角度,其大小是发射器运动的大小乘以velocityFromMovement。 默认值为0。 |
Emitter类型信号
- emitParticles(Array particles)
当粒子被发射时,这个信号被发射。particles是一个JavaScript的粒子对象数组。可以在处理程序中直接修改粒子属性。
注意:JavaScript执行速度较慢,所以不建议在大容量粒子系统中使用它。
注意:对应的处理程序是onEmitParticles。
Emitter类型函数
- burst(int count, int x, int y)
立即从该发射器发射由计数指定的粒子数。粒子被发射,就像发射器被放置在(x, y),但所有其他属性都是相同的。
- burst(int count)
立即从该发射器发射由计数指定的粒子数。
- pulse(int duration)
如果发射器未启用,则在指定的持续时间内启用它(以毫秒为单位),然后将其关闭。
简单使用
编写代码
将前面ParticleSystem的代码中Emitter发射器的代码进行如下修改。
ItemParticle {
system: particles
delegate:
Text {
id: txt
text: qsTr("♥")
font.pixelSize: 28
color: "red";
}
}
Emitter {
system: particles;
x: 100; width: 500
emitRate: 20
lifeSpan: 2000
size: 16
endSize: 20
sizeVariation: 6
lifeSpanVariation: 1000
velocity: PointDirection {y:100; yVariation: 50; }
}
- emitRate: 20设置发射速度为每秒20颗粒子
- lifeSpan: 2000设置每个粒子生存时间2秒,这里的时间单位是毫秒。
- size: 16设置发射粒子时初始时粒子大小为16px
- endSize: 20粒子大小是可变的,末期时粒子大小变成了20px
- sizeVariation: 6粒子之间的大小差异
- lifeSpanVariation: 1000同一个方向上的粒子寿命差异为1秒
- velocity: PointDirection {y:100; yVariation: 50; } 设置发射粒子的初始速度为沿y轴正方向,即画面中的从上往下。