粒子系统的一个普遍公认的定义是:粒子系统由具有相同属性规则的微小个体组成,大量微小个体可以随机显示不同特征的粒子的集合体。
一、说明
基于
C++ 11
和
EasyX
实现。
主要功能
内置一些简单的粒子行为。可以控制或修改相关属性,生成更加复杂和精彩的效果。
☁ 特效
☁ 粒子
☁ 发射器
二、运行截图
三、项目源码
源码有两个文件,ParticleSystem.h 和ParticleSystem.cpp
先看流程图:
用代码描述就是:
#include "ParticleSystem.h"
int main()
{
constexpr float Width = 1024.0f;
constexpr float Height = 576.0f;
// step1:初始化【粒子系统】
FParticleSystem& ParticleSystem = FParticleSystem::GetInstance()
.SetName(_T("Particle System"))
.SetVersion(2, 8, 1)
.SetScreenSize({Width, Height})
.InitInstance();
// step2: 新建【粒子特效】或者跳过
ParticleSystem.CreateParticleEffect(14)
.SetFunction([](const float InDeltaTime, FParticleInstance& InParticleInstance)
{
// do everything you want
InParticleInstance.Velocity =
{
FTool::GenerateRandomNumber(0, 10, 2.0f),
-3.0f + FTool::GenerateRandomNumber(-5, 5, 2.0f)
};
})
.SetKeyboard('N')
.SetHelpContent(_T("Diy"))
.SetIsShowHelp(true)
.SetIsEnable(false)
.Finish();
// step3: 新建或复用【粒子模板】
ParticleSystem.CreateParticleTemplate(1)
.SetName(_T("样例粒子"))
.SetDescription(_T("样例"))
.SetShapeType(EShapeType::SolidCircle)
// .SetShapeType(EShapeType::Image)
// .SetImage(FTool::LoadImageA(_T("star.png"), 10))
.SetColor({RGB(125, 125, 0), RGB(255, 255, 255), EGenerateType::RandColor})
.SetStartLocation({0.0f, 0.0f})
.SetStartSpeed({0.0f, 25.0f})
.SetRadius({1.0f, 4.4f})
.SetFriction({0.93f, 0.95f})
.SetLifeTime({0.4f, 0.8f})
.SetEffects(FVarNum(1), 14)
.Finish();
ParticleSystem.CreateParticleTemplate(2, 1)
.SetShapeType(EShapeType::SolidCircle)
.SetColor({RGB(125, 0, 125), RGB(255, 255, 255), EGenerateType::RandColor});
ParticleSystem.CreateParticleTemplate(3, 1)
.SetShapeType(EShapeType::SolidSquare)
.SetColor({RGB(0, 125, 125), RGB(255, 255, 255), EGenerateType::RandColor});
// step4: 新建或复用【发射器模板】
ParticleSystem.CreateEmitterTemplate(1)
.SetName(_T("样例发射器"))
.SetDescription(_T("样例"))
.SetSum(6666)
.SetTime(0.0f)
.SetLocation({Width * 0.5f, Height * 0.5f})
.SetAngle({-90.0f, 90.0f})
.SetSpeed(1)
.SetIsLoop(true)
.Finish();
ParticleSystem.CreateEmitterTemplate(2, 1)
.SetLocation({Width * 0.5f, Height * 0.5f}).Finish();
ParticleSystem.CreateEmitterTemplate(3, 1)
.SetLocation({Width * 0.5f, Height * 0.5f}).Finish();
// step5: 生成【带多个粒子实例的发射器实例】
ParticleSystem.CreateEmitterInstance(1).CreateParticleInstance(FVarNum(1), 1).Finish();
ParticleSystem.CreateEmitterInstance(2).CreateParticleInstance(FVarNum(1), 2).Finish();
ParticleSystem.CreateEmitterInstance(3).CreateParticleInstance(FVarNum(1), 3).Finish();
// step6:【粒子系统】运行所有的【发射器实例】
ParticleSystem.RunEmitterInstances();
return 0;
}
可以看到,只需要设置好相关参数,就可以轻松使用粒子系统。
当然上面的例子只是演示,没有做什么效果(完结撒花),期待你们给出更好的样例。
而且呃,很多好玩且有用的参数和功能并未实现,不过之后会一直更新的~
但是由于完整过多,这里我就不贴出来了,需要的可以
点击下方卡片自行下载
。
版权声明:本文为weixin_45713725原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。