Flutter粒子特效插件ultimate_particle_fx的使用

Flutter粒子特效插件ultimate_particle_fx的使用

Ultimate Particle FX 是一个为您的 Flutter 应用程序定制的粒子效果插件。

如何使用

Ultimate Particle FX 可以作为一个简单的 widget 使用。

在您的 pubspec.yaml 文件中添加此依赖,并使用最新版本:

dependencies:
  ultimate_particle_fx: ^latest_version

在 Dart 文件中导入插件并使用它:

import 'package:ultimate_particle_fx/ultimate_particle_fx.dart';

[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    extendBodyBehindAppBar: true,
    body: UltimateParticleFx(
      neverEnding: true,
      width: MediaQuery.of(context).size.width + 150,
      height: MediaQuery.of(context).size.height + 150,
      velocity: const Offset(0, 0),
      position: const Offset(0, 0),
      colors: const [Colors.green, Colors.yellow, Colors.red, Colors.blue],
      maxSize: 200.0,
      minSize: 5.0,
      lifespan: 1000,
      maxParticles: 10,
      speed: 0.5,
      rotation: 0,
      shapes: const [
        ParticleShape.circle, 
        ParticleShape.square, 
        ParticleShape.triangle,
        ParticleShape.star,
        ParticleShape.hexagon,
        ParticleShape.diamond,
        ParticleShape.pentagon,
        ParticleShape.ellipse,
        ParticleShape.cross,
        ParticleShape.heart,
        ParticleShape.arrow,
        ParticleShape.cloud,
        ParticleShape.octagon,
        ParticleShape.custom
      ],
      customParticleImage: const [
        AssetImage('assets/images/cloud.png'),
        AssetImage('assets/images/coin.png'),
        NetworkImage('https://www.vhv.rs/dpng/d/397-3976228_wispy-clouds-sprite-cloud-sprite-hd-png-download.png'),
      ],
      gradient: const LinearGradient(
        colors: [Colors.orange, Colors.red],
        begin: Alignment.topLeft,
        end: Alignment.bottomRight,
        stops: [0.0, 1.0]
      ),
      allowParticlesExitSpawnArea: true,
      spawnAreaPosition: const Offset(0, 0),
      spawnPosition: SpawnPosition.random,
      movementDirection: MovementDirection.random,
      spawnAreaWidth: double.infinity,
      spawnAreaHeight: double.infinity, 
      spawnAreaColor: Colors.transparent,
      touchType: TouchType.push,
      child: const Center(
        child: Text('Ultimate Particle FX')
      )
    )
  );
}

更多关于Flutter粒子特效插件ultimate_particle_fx的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter粒子特效插件ultimate_particle_fx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用ultimate_particle_fx插件来实现粒子特效的代码案例。这个插件允许你创建各种复杂的粒子动画效果,非常适合游戏和应用程序中的视觉增强。

首先,确保你的Flutter项目已经设置好,并且你已经添加了ultimate_particle_fx依赖。你可以在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  ultimate_particle_fx: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

代码示例

以下是一个简单的Flutter应用示例,展示了如何使用ultimate_particle_fx插件来创建一个基本的粒子特效。

import 'package:flutter/material.dart';
import 'package:ultimate_particle_fx/ultimate_particle_fx.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Particle Effects Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ParticleEffectScreen(),
    );
  }
}

class ParticleEffectScreen extends StatefulWidget {
  @override
  _ParticleEffectScreenState createState() => _ParticleEffectScreenState();
}

class _ParticleEffectScreenState extends State<ParticleEffectScreen> {
  late ParticleController _particleController;

  @override
  void initState() {
    super.initState();
    // 初始化粒子控制器
    _particleController = ParticleController(
      width: MediaQuery.of(context).size.width,
      height: MediaQuery.of(context).size.height,
      duration: 3000, // 持续时间
      particleCount: 100, // 粒子数量
      initialVelocity: 100.0, // 初始速度
      initialAngle: 45.0, // 初始角度
      initialLifeSpan: 2.0, // 粒子生命周期
      gravity: 0.1, // 重力影响
      radialAcceleration: 0.0, // 径向加速度
      tangentialAcceleration: 0.0, // 切向加速度
      color: Colors.red.withOpacity(0.8), // 粒子颜色
      blendMode: BlendMode.srcOver, // 混合模式
    );

    // 启动粒子动画
    _particleController.start();
  }

  @override
  void dispose() {
    // 释放资源
    _particleController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Particle Effects Demo'),
      ),
      body: Center(
        child: CustomPaint(
          size: Size(
            MediaQuery.of(context).size.width,
            MediaQuery.of(context).size.height,
          ),
          painter: ParticlePainter(
            particleController: _particleController,
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 重新启动粒子动画
          _particleController.reset();
        },
        tooltip: 'Restart',
        child: Icon(Icons.replay),
      ),
    );
  }
}

class ParticlePainter extends CustomPainter {
  final ParticleController particleController;

  ParticlePainter({required this.particleController});

  @override
  void paint(Canvas canvas, Size size) {
    final Paint paint = Paint()
      ..color = particleController.color
      ..blendMode = particleController.blendMode
      ..style = PaintingStyle.fill;

    for (var particle in particleController.particles) {
      final double life = (particle.life / particleController.initialLifeSpan);
      final double opacity = life;

      paint.color = particleController.color.withOpacity(opacity);

      canvas.drawCircle(
        Offset(particle.x, particle.y),
        particle.size,
        paint,
      );
    }
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return true;
  }
}

解释

  1. 依赖管理:在pubspec.yaml文件中添加ultimate_particle_fx依赖。
  2. ParticleController:在initState方法中初始化ParticleController,配置粒子特效的参数,如粒子数量、颜色、速度等。
  3. CustomPaint:使用CustomPaint和自定义的ParticlePainter来绘制粒子。
  4. 粒子绘制:在ParticlePainterpaint方法中,根据ParticleController提供的粒子数据绘制每个粒子。
  5. 动画重启:通过点击浮动按钮来重启粒子动画,调用_particleController.reset()方法。

这个示例展示了如何使用ultimate_particle_fx插件来创建一个简单的粒子特效。你可以根据需要调整粒子的参数和动画效果,以创建更复杂和吸引人的视觉效果。

回到顶部