C语言2700行代码,粒子系统 (Particle System) ,EasyX图形库最强代码~

  • Post author:
  • Post category:其他


粒子系统的一个普遍公认的定义是:粒子系统由具有相同属性规则的微小个体组成,大量微小个体可以随机显示不同特征的粒子的集合体。

一、说明

基于

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 版权协议,转载请附上原文出处链接和本声明。