LabelTick.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { _decorator, Component, Node, Label, CCInteger, Color } from "cc"
  2. const { ccclass, property, requireComponent } = _decorator
  3. @ccclass("UIExtend/LabelTick")
  4. @requireComponent(Label)
  5. export class LabelTick extends Component {
  6. @property
  7. private prefix: string = ''
  8. @property
  9. private suffix: string = ''
  10. //保留小数点后几位
  11. @property(CCInteger)
  12. private decimalPlaces: number = 0
  13. private label: Label = null
  14. private curNumber: number = 0
  15. private intervalPerUpdate: number = 0
  16. private finalNumber: number = 0
  17. protected onLoad(): void {
  18. this.label = this.getComponent(Label)
  19. }
  20. protected onEnable(): void {
  21. }
  22. protected onDisable(): void {
  23. this.unscheduleAllCallbacks()
  24. }
  25. public init(n: number): void {
  26. this.curNumber = n
  27. this.label.string = `${this.prefix}${this.curNumber.toFixed(this.decimalPlaces)}${this.suffix}`
  28. }
  29. public tickLabel(finalNumber: number, duration: number = 0.5) {
  30. if (this.curNumber === finalNumber) {
  31. this.curNumber = finalNumber
  32. this.finalNumber = finalNumber
  33. this.label.string = `${this.prefix}${this.finalNumber.toFixed(this.decimalPlaces)}${this.suffix}`
  34. }
  35. else {
  36. this.finalNumber = finalNumber
  37. this.intervalPerUpdate = (finalNumber - this.curNumber) / (duration * 33)
  38. this.unschedule(this.updateForNumber)
  39. this.schedule(this.updateForNumber, 0.03)
  40. this.label.string = `${this.prefix}${this.curNumber.toFixed(this.decimalPlaces)}${this.suffix}`
  41. }
  42. }
  43. private updateForNumber(dt) {
  44. this.curNumber += this.intervalPerUpdate
  45. if ((this.intervalPerUpdate > 0 && this.curNumber > this.finalNumber)
  46. || (this.intervalPerUpdate < 0 && this.curNumber < this.finalNumber)
  47. ) {
  48. this.curNumber = this.finalNumber
  49. this.unschedule(this.updateForNumber)
  50. }
  51. this.label.string = `${this.prefix}${this.curNumber.toFixed(this.decimalPlaces)}${this.suffix}`
  52. }
  53. public stop() {
  54. this.unschedule(this.updateForNumber)
  55. this.curNumber = null
  56. this.finalNumber = null
  57. }
  58. }