cocos2d-x:Particle System(粒子系统)

一、粒子系统简介:

粒子系统最早出现在80年代,主要用于解决由大量按一定规则运动(变化)的微小物质在计算机上的生成和显示问题。Particle System的应用非常广泛,大的可以模拟原子弹爆炸,星云变化,小的可以模拟水波、火焰、烟火、云雾等,而这些自然现象用常规的图形算法是很难逼真再现的。

Particle System可以说是一种基于物理模型来解决问题的方法,它的核心不在于如何显示,而在用于对微小物质模型的规则提取。

粒子运动(变化)的规则可以很简单也可以很复杂,这取决你所模拟的对象。举例来说,在对FireWorks(烟火)的模拟中,我们可以让烟火由上百个小的粒子组成,每个粒子都具有以下一些属性及其规则(对各个属性施加不同的规则,就可以获得不同形态的烟火):

Coordinate(坐标)

在烟火爆炸的时刻,每个粒子都有一个相同的初始坐标,随着时间的推移,粒子的新坐标将由它的旧坐标和加速度来求得

Velocity(速度)

每个粒子都有一个随机产生的初始速度,粒子的新速度由加速度和空气阻尼来求得

Acceleration(加速度)

在烟火中,每个粒子的加速度都等于重力加速度

Color(颜色)

粒子颜色取决于粒子的速度或生命值的大小

Life(生命值)

每个粒子都有一个初始的随机生命值,这个值将随着时间的推移而逐渐减小,直到等于0

你会发现,Particle System中的粒子与C++中类的概念有些类似,实际上你完全可以将它当成类来处理,一个粒子就是一个类的实例对象,只不过有时在涉及程序优化的具体细节上,你需要放弃使用类,而使用简单而快速的紧凑代码。

Particle System虽然在处理大量单独粒子的运动(变化)上很有用处,但是一涉及到需要考虑粒子间相互作用的场合,因为这时的计算量呈粒子数量的指数级增长,它就显得有些力不从心了。比如在模拟有相互引力作用下的大量星体的运动,大量粒子的相互碰撞等。

二、粒子系统的生命周期

首先,从粒子池中获取一个粒子,

然后计算赋予初始属性后,发射他。

在粒子飞行过程中,不断的刷新来修正他的属性。

粒子死亡后,回归粒子池。

 1     function getEmitter(idx)
 2         local emitter = cc.ParticleSnow:create()      --创建一个雪花粒子发射器
 3         emitter:setDuration(-1)                       --设置发射粒子的持续时间-1表示一直发射,0没有意义,其他值表示持续时间
 4         emitter:setPosition(300, 1300)                --设置粒子发射器的位置
 5         emitter:setLife(10)                           --设置粒子的生命值
 6         emitter:setLifeVar(1)                         --设置粒子生命值衰减变化率
 7
 8         emitter:setGravity(cc.p(0, -10))              --设置粒子重力方向,这个点是相对发射点,x正方向为右,y正方向为上
 9         emitter:setSpeed(130)                         --设置粒子速度
10         emitter:setSpeedVar(40)                       --设置速度变化率
11
12         local startColor = emitter:getStartColor()    --设置粒子开始的颜色
13         startColor.r = 0.9
14         startColor.g = 0.9
15         startColor.b = 0.9
16         emitter:setStartColor(startColor)
17
18         local startColorVar = emitter:getStartColorVar()
19         startColorVar.b = 0.1
20         emitter:setStartColorVar(startColorVar)       --设置粒子颜色变化率
21         local size = cc.Sprite:create("commonUI/newres/snow/snow_" .. idx .. ".png"):getContentSize()
22         emitter:setStartSize(size.width)
23         emitter:setEndSize(size.width / 3)            --设置粒子开始的大小
24         emitter:setEndSizeVar(size.width / 3 / emitter:getLife())  ----设置粒子生命结束时的大小
25         if idx == 3 then
26             emitter:setEmissionRate(emitter:getTotalParticles() / emitter:getLife() / 2)  --设置发射器每秒钟发射的粒子个数
27         else
28             emitter:setEmissionRate(emitter:getTotalParticles() / emitter:getLife() / 20)
29             emitter:setTotalParticles(8)              --设置总的粒子个数
30         end
31
32         emitter:setTexture(cc.Director:getInstance():getTextureCache():addImage("commonUI/newres/snow/snow_" .. idx .. ".png")) --设置发射的粒子图片
33         return emitter
34     end
时间: 2024-11-23 01:47:31

cocos2d-x:Particle System(粒子系统)的相关文章

Unity3D:粒子系统Particle System

1. GameObject → Create Other  →  Particle System. 2. 选中 Particle System,可看到下列屬性: 3.Particle System: Duration: 粒子发射时间(设定为5秒,每5秒发射一次粒子). Looping:是否循环产生粒子(如果要持续发射就打勾:否则将Looping关闭). Start Delay:粒子一开始产生是否延迟发射(若设定为5,时间过5秒才开始发射粒子,预设为0). Start Lifetime:粒子生命周

[原]Unity3D深入浅出 - 粒子系统(Particle System)

粒子系统是在三维控件渲染出来的二维图像,主要用于烟,火,水滴,落叶等效果.一个粒子系统由例子发射器.粒子动画器和粒子渲染器三个独立的部分组成. Unity中自带了一些粒子效果,在Assets>ImportPackage>Particles,即可将Prticles.UnityPackage导入到项目中,这些粒子效果包括:Dust(沙尘).Fire(火焰).Water(水).Smoke(烟雾).Sparkles(闪光),还有一些粒子资源 Sources.Misc(杂项),如下图 随便拖出来几个 接

Unity3D学习笔记——组件之Effects(效果/特效)——Particle System(粒子系统)

Effects:效果/特效. Particle System:粒子系统.可用于创建烟雾.气流.火焰.涟漪等效果. 在Unity3D 3.5版本之后退出了新的shuriken粒子系统:   添加组件之后的效果:   其中的Open Editor按钮可以打开粒子编辑器,用于编辑复杂的粒子效果. 由于shuriken粒子系统是模块化的管理方式,所以可以动态的添加模块: 1.初始化模块:此模块是效果组件固有的模块. Duration:粒子发射器,发射粒子的时间.单位为S(秒). Looping:是否开启

粒子系统模块(Particle System Modules40)

粒子系统模块(忍者飞镖) 粒子系统(忍者飞镖)(Particle System (Shuriken)) 用模块描述粒子一段时间内的行为.此处记载了模块的详细说明.有关模块介绍,请参阅此页面. 初始化模块 该模块始终存在,无法删除或禁用.     持续时间 (Duration) 粒子系统 (Particle System) 发射粒子的持续时间. 循环 (Looping) 粒子系统 (Particle System) 是否循环. 预热 (Prewarm) 只可预热循环系统,这意味着,粒子系统 (Pa

QML官方教程——Using the Qt Quick Particle System

附网址:http://qt-project.org/doc/qt-5/qtquick-effects-particles.html Using the Qt Quick Particle System-- 使用Qt Quick粒子系统 所有粒子系统的类型都可以在QtQuick.Particles模块文档中找到. 注意想要使用粒子模块中的类型,你需要使用下面这个代码进行引入: import QtQuick.Particles 2.0 · The ParticleSystem 粒子系统包含4个主要的

Unity3D Particle System + Audio Source = 音乐可视化

很简单的东西,上代码: using UnityEngine; using System.Collections; public class particle_ocean : MonoBehaviour { public ParticleSystem particleSystem; private ParticleSystem.Particle[] particlesArray; public int resolution = 256; public float spacing = 0.5f; p

Particle System Emission

它是粒子发射器,如果你想控制粒子的数量就可以通过这里设置! 属性总体图: Rate 每秒钟发射的粒子个数 Bursts 爆发(没经过多少秒,爆发出一些粒子) Time=秒 Particles=粒子数量 Distance 每米发射(我调整了下好像没用...)   效果图:

计算机图形学名词解释

转自 http://blog.csdn.net/lwfcgz/article/details/39254743 3D三维(three dimension).客观世界中静止的物体都是三维的,在计算机图形学中常在一定的坐标系中用(x,y,z)坐标系列表示物体. 3D modeling3D建模.用三维坐标来描述物体的形状.在各种计算机图形应用领域中有不同的三维建模方法,用不同的算法来描述这些领域中的物体和对象. 3D transformation3D变换.在三维空间中把物体的三维坐标从一个位置变换至另

切水果项目总结

2/3D游戏:2D 辅助插件:NGUI 游戏制作难度系数:初级 用到的其他工具:Trail Renderer(拖尾组件) 1.NGUI使背景图片适应任何分辨率 void Start() { UIRoot root = GameObject.FindObjectOfType<UIRoot>(); if (root != null) { float s = (float)root.activeHeight / Screen.height; int height = Mathf.CeilToInt(