HarmonyOS 如何实现粒子效果

HarmonyOS
2025-01-09 16:34:37
浏览
收藏 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%')
    }
  }
}
分享
微博
QQ
微信
回复
2025-01-09 18:00:55
相关问题
HarmonyOS 如何实现阴影效果
1072浏览 • 1回复 待解决
HarmonyOS 如何实现滚动渐变效果
1302浏览 • 1回复 待解决
HarmonyOS 如何实现数据翻页效果
946浏览 • 1回复 待解决
HarmonyOS 如何实现阴影边框效果
1979浏览 • 1回复 待解决
HarmonyOS如何实现文字轮播效果
1450浏览 • 1回复 待解决
HarmonyOS 如何实现底部弹窗效果
1612浏览 • 1回复 待解决
HarmonyOS 如何实现跑分效果
705浏览 • 1回复 待解决
如何实现视频滤镜效果
3269浏览 • 1回复 待解决
如何实现动画转场效果
2144浏览 • 1回复 待解决
canvas如何实现水印效果
2120浏览 • 1回复 待解决
如何实现星级评分效果
1342浏览 • 1回复 待解决
HarmonyOS 如何实现白色毛玻璃效果
907浏览 • 1回复 待解决
HarmonyOS 如何实现顶部吸顶效果
777浏览 • 1回复 待解决
HarmonyOS Vibration如何实现长按震动效果
1792浏览 • 1回复 待解决
HarmonyOS 如何实现柔滑边缘的效果
763浏览 • 1回复 待解决
HarmonyOS canvas如何实现画线跟手效果
991浏览 • 1回复 待解决
HarmonyOS app如何实现毛玻璃效果
1000浏览 • 1回复 待解决
HarmonyOS 渐变遮罩效果如何实现
1151浏览 • 1回复 待解决