UIEffect.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { _decorator, Component, Node, Sprite, SpriteFrame, Vec3, UITransform, v3 } from 'cc';
  2. import { Sound } from '../core/sound/Sound';
  3. import { Utils } from '../core/utils/Utils';
  4. import { BezierComponent } from '../Turntable/BezierComponent';
  5. const { ccclass, property } = _decorator;
  6. @ccclass('UIEffect')
  7. export class UIEffect extends Component {
  8. @property({ type: [SpriteFrame], tooltip: "粒子合集" }) partics: Array<SpriteFrame> = [];
  9. @property({ type: [Node], tooltip: "结束点合集" }) endPoints: Array<Node> = [];
  10. @property({ tooltip: "播放音效所需的声音组件", type: Sound })
  11. public sound: Sound;
  12. public async showBezierRedBagEffect(type: number, effectNode?: Node, particCount: number = 11, startPoint: Vec3 = v3(0, 0, 0)) {
  13. this.sound && this.sound.play(particCount == 1 ? 1 : 0);
  14. for (let i = 0; i < particCount; i++) {
  15. let node = new Node();
  16. //附加图片显示组件
  17. node.addComponent(Sprite);
  18. node.getComponent(Sprite)!.spriteFrame = this.partics[type];
  19. node.addComponent(BezierComponent);
  20. let bezierComponent = node.getComponent(BezierComponent);
  21. bezierComponent.startPoint = startPoint;
  22. bezierComponent.ctrl1Point = new Vec3(Utils.random_both(300, -300), Utils.random_both(0, -500))
  23. bezierComponent.ctrl2Point = new Vec3(Utils.random_both(100, -100), Utils.random_both(300, -300))
  24. bezierComponent.endPoint = this.endPoints[type].position;
  25. node.setPosition(0, 0);
  26. if (effectNode) {
  27. effectNode.addChild(node);
  28. } else {
  29. this.node.addChild(node);
  30. }
  31. }
  32. }
  33. }