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 如何实现阴影效果
408浏览 • 1回复 待解决
HarmonyOS 如何实现跑分效果
168浏览 • 1回复 待解决
HarmonyOS 如何实现阴影边框效果
1076浏览 • 1回复 待解决
HarmonyOS如何实现文字轮播效果
675浏览 • 1回复 待解决
HarmonyOS 如何实现滚动渐变效果
760浏览 • 1回复 待解决
HarmonyOS 如何实现底部弹窗效果
729浏览 • 1回复 待解决
HarmonyOS 如何实现数据翻页效果
439浏览 • 1回复 待解决
如何实现视频滤镜效果
2410浏览 • 1回复 待解决
如何实现动画转场效果
1285浏览 • 1回复 待解决
如何实现星级评分效果
820浏览 • 1回复 待解决
canvas如何实现水印效果
1389浏览 • 1回复 待解决
HarmonyOS 如何实现柔滑边缘的效果
287浏览 • 1回复 待解决
HarmonyOS 如何实现顶部吸顶效果
162浏览 • 1回复 待解决
HarmonyOS 如何实现白色毛玻璃效果
200浏览 • 1回复 待解决
HarmonyOS 渐变遮罩效果如何实现
529浏览 • 1回复 待解决
HarmonyOS app如何实现毛玻璃效果
171浏览 • 1回复 待解决
HarmonyOS 如何实现文字描边效果
868浏览 • 0回复 待解决
HarmonyOS 如何实现折叠吸顶效果
328浏览 • 1回复 待解决