HarmonyOS 如何实现粒子效果

HarmonyOS
2025-01-09 16:34:37
648浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
superinsect

示例参考:

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  @State viewWidth: number = 0
  @State viewHeight: number = 0
  build() {
    Stack() {
      Particle({
        particles: [
          {
            emitter: {
              particle: {
                type: ParticleType.POINT, //粒子类型
                config: {
                  radius: 1//圆点半径
                },
                count: -1, //粒子总数
                lifetime: 5000, //粒子生命周期,单位ms
                lifetimeRange: 100//粒子生命周期取值范围,单位ms
              },
              emitRate: 200, //每秒发射粒子数
              position: [0, 0],
              shape: ParticleEmitterShape.CIRCLE, //发射器形状
            },
            color: {
              range: [Color.White, Color.White], //初始颜色范围
              // updater: {
              // type: ParticleUpdater.CURVE, //变化方式为曲线变化
              // config: [
              // {
              // from: Color.White, //变化起始值
              // to: Color.Pink, //变化终点值
              // startMillis: 0, //开始时间
              // endMillis: 3000, //结束时间
              // curve: Curve.EaseIn//变化曲线
              // },
              // {
              // from: Color.Pink,
              // to: Color.Orange,
              // startMillis: 3000,
              // endMillis: 5000,
              // curve: Curve.EaseIn
              // },
              // {
              // from: Color.Orange,
              // to: Color.Pink,
              // startMillis: 5000,
              // endMillis: 8000,
              // curve: Curve.EaseIn
              // },
              // ]
              // }
            },
            opacity: {
              range: [0.0, 1.0], //粒子透明度的初始值从【0.0到1.0】随机产生
              updater: {
                type: ParticleUpdater.CURVE, //透明度的变化方式是随机变化
                config: [
                  {
                    from: 0.0,
                    to: 1.0,
                    startMillis: 0,
                    endMillis: 2500,
                    curve: Curve.EaseIn
                  },
                  {
                    from: 1.0,
                    to: 0.0,
                    startMillis: 2500,
                    endMillis: 5000,
                    curve: Curve.EaseIn
                  }
                ]
              }
            },
            scale: {
              range: [0.0, 0.0],
              updater: {
                type: ParticleUpdater.CURVE,
                config: [
                  {
                    from: 0.0,
                    to: 1.0,
                    startMillis: 0,
                    endMillis: 1000,
                    curve: Curve.EaseIn
                  },
                  {
                    from: 1.0,
                    to: 0,
                    startMillis: 1000,
                    endMillis: 5000,
                    curve: Curve.EaseIn
                  }
                ]
              }
            },
            acceleration: {
              //加速度的配置,从大小和方向两个维度变化,speed表示加速度大小,angle表示加速度方向
              speed: {
                range: [3, 9],
                updater: {
                  type: ParticleUpdater.RANDOM,
                  config: [1, 20]
                }
              },
              angle: {
                range: [0, 360]
              }
            },
            spin: {
              range: [0, 1.0],
              updater: {
                type: ParticleUpdater.CURVE,
                config: [
                  {
                    from: 0,
                    to: 180,
                    startMillis: 0,
                    endMillis: 5000,
                    curve: Curve.EaseIn
                  }
                ]
              }
            },
            velocity: {
              speed: [20, 30],
              angle: [0.0, 1.0]
            }
          }
        ]
      })
        .width('100%')
        .height(300)




        .backgroundColor(Color.Green)
        .disturbanceFields([{
          strength: 80,// 场强,表示场从中心向外的排斥力的强度,默认值0。正数表示排斥力方向朝外,负数表示吸引力,方向朝内。
          shape: DisturbanceFieldShape.CIRCLE,// 场的形状
          size: { width: this.viewWidth, height: this.viewHeight }, // 场的大小
          position: { x: this.viewWidth / 2, y: this.viewHeight / 2 },// 场的位置
          // feather:15,
          // noiseScale:10,
          // noiseFrequency:15,
          // noiseAmplitude:5
        }])// .emitter(this.emitterProperties)
        .onAreaChange((oldValue: Area, newValue: Area) => {
          this.viewWidth = newValue.width as number
          this.viewHeight = newValue.height as number
          console.log('111---> onAreaChange' + newValue)
          console.log('111---> onAreaChangeViewWidth =' + this.viewWidth)
          console.log('111---> onAreaChangeViewHeight =' + this.viewHeight)
        })
        .height('100%')
        .width('100%')
    }
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
分享
微博
QQ
微信
回复
2025-01-09 18:00:55
相关问题
HarmonyOS 如何实现阴影效果
788浏览 • 1回复 待解决
HarmonyOS 如何实现跑分效果
454浏览 • 1回复 待解决
HarmonyOS 如何实现数据翻页效果
743浏览 • 1回复 待解决
HarmonyOS 如何实现滚动渐变效果
1051浏览 • 1回复 待解决
HarmonyOS 如何实现阴影边框效果
1522浏览 • 1回复 待解决
HarmonyOS 如何实现底部弹窗效果
1230浏览 • 1回复 待解决
HarmonyOS如何实现文字轮播效果
1112浏览 • 1回复 待解决
如何实现动画转场效果
1729浏览 • 1回复 待解决
如何实现视频滤镜效果
2842浏览 • 1回复 待解决
如何实现星级评分效果
1133浏览 • 1回复 待解决
canvas如何实现水印效果
1798浏览 • 1回复 待解决
HarmonyOS 如何实现白色毛玻璃效果
561浏览 • 1回复 待解决
HarmonyOS 如何实现柔滑边缘的效果
578浏览 • 1回复 待解决
HarmonyOS 如何实现顶部吸顶效果
527浏览 • 1回复 待解决
HarmonyOS Vibration如何实现长按震动效果
1032浏览 • 1回复 待解决
HarmonyOS canvas如何实现画线跟手效果
705浏览 • 1回复 待解决
HarmonyOS 如何实现折叠吸顶效果
666浏览 • 1回复 待解决
HarmonyOS 如何实现文字描边效果
1299浏览 • 0回复 待解决