QTween.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. export enum TweenTyep {
  2. move = 0,
  3. circle,
  4. bezier,
  5. rotate,
  6. scale
  7. }
  8. const { ccclass, property } = cc._decorator;
  9. @ccclass("TweenMess")
  10. export class TweenMess {
  11. @property({ type: cc.Enum(TweenTyep) })
  12. tweenType: TweenTyep = TweenTyep.move;
  13. @property({ type: [cc.Vec2] })
  14. posList: Array<cc.Vec2> = [cc.v2(0, 0)];
  15. @property({ visible() { return this.tweenType == TweenTyep.circle || this.tweenType == TweenTyep.rotate } })
  16. angleV: number = 0;
  17. @property()
  18. actTime: number = 1;
  19. @property()
  20. delayTime: number = 0;
  21. }
  22. @ccclass
  23. export default class NewClass extends cc.Component {
  24. @property({ type: [TweenMess] })
  25. tweenList: Array<TweenMess> = [];
  26. // @property
  27. // delayTime: number = 0;
  28. start() {
  29. this.creatTween();
  30. this.node.opacity = 255;
  31. }
  32. startNum: number = 0;
  33. mainTween: cc.Tween = null;
  34. creatTween() {
  35. this.mainTween = cc.tween(this.node);
  36. if (this.tweenList.length <= 0) return;
  37. for (let i = 0; i < this.tweenList.length; i++) {
  38. let tw = this.tweenList[i];
  39. if (tw.tweenType == TweenTyep.move) {
  40. this.mainTween.to(tw.actTime, { position: tw.posList[0] }).delay(tw.delayTime);
  41. }
  42. else if (tw.tweenType == TweenTyep.bezier) {
  43. this.runRotate();
  44. this.mainTween.bezierTo(tw.actTime, tw.posList[0], tw.posList[1], tw.posList[2]).delay(tw.delayTime);
  45. }
  46. else if (tw.tweenType == TweenTyep.circle) {
  47. this.mainTween.call(() => {
  48. this.CurAngle = 0;
  49. this.centerPos = tw.posList[0];
  50. // @ts-ignore
  51. let tween = cc.tween(this).to(tw.actTime, { CurAngle: tw.angleV * tw.actTime }).start();
  52. }).delay(tw.actTime + tw.delayTime);
  53. }
  54. else if (tw.tweenType == TweenTyep.rotate) {
  55. this.mainTween.by(tw.actTime, { angle: tw.angleV });
  56. }
  57. else if (tw.tweenType == TweenTyep.scale) {
  58. this.mainTween.to(tw.actTime, { scaleX: tw.posList[0].x, scaleY: tw.posList[0].y }).delay(tw.delayTime);
  59. }
  60. }
  61. this.mainTween.union().repeatForever().start();
  62. }
  63. angleConut: number = 0;
  64. centerPos: cc.Vec2 = cc.v2(0, 0);
  65. get CurAngle() {
  66. return this.angleConut;
  67. }
  68. set CurAngle(num) {
  69. if (Math.abs(this.angleConut - num) < 10) {
  70. let pos: cc.Vec2 = cc.v2(this.node.getPosition());
  71. pos = pos.sub(this.centerPos).rotate((num - this.angleConut) / 180 * Math.PI).add(this.centerPos);
  72. this.node.setPosition(pos);
  73. }
  74. this.angleConut = num;
  75. }
  76. isRotate: boolean = false;
  77. runRotate() {
  78. if (this.isRotate) return;
  79. this.isRotate = true;
  80. if (this.node.x < 0) {
  81. this.schedule(() => { this.node.angle += 3 }, 0.01);
  82. }
  83. else {
  84. this.schedule(() => { this.node.angle -= 3 }, 0.01);
  85. }
  86. }
  87. }