JMLoadProgressBar.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // 热更新进度条
  2. cc.Class({
  3. editor: {
  4. menu: '嘉米公用/JMLoadProgressBar'
  5. },
  6. extends: cc.Component,
  7. properties: {
  8. progressBar: cc.ProgressBar,
  9. progressMarkNode: cc.Node,
  10. progressLabel: cc.Label,
  11. _totalTime: 0,
  12. _currentTime: 0,
  13. _progress: 0,
  14. _currentProgress: 0
  15. },
  16. onLoad () {
  17. this._totalTime = 0;
  18. this._currentTime = 0;
  19. this._progress = 0;
  20. this._currentProgress = 0;
  21. this.updateUI();
  22. },
  23. update (dt) {
  24. if (this._totalTime == 0) {
  25. return;
  26. }
  27. // 超时了,结束
  28. if (this._totalTime < this._currentTime + dt) {
  29. this._totalTime = 0;
  30. this._currentTime = 0;
  31. this._currentProgress = this._progress;
  32. this.updateUI();
  33. return;
  34. }
  35. let remainTime = this._totalTime - this._currentTime; // 必定大于0
  36. let remainProgress = this._progress - this.progressBar.progress;
  37. let deltaProgress = dt * remainProgress / remainTime;
  38. this._currentProgress += deltaProgress;
  39. this._currentTime += dt;
  40. this.updateUI();
  41. },
  42. updateUI () {
  43. let progress = this._currentProgress;
  44. this.progressBar.progress = progress;
  45. let width = this.progressBar.node.width;
  46. let markX = width * (progress - 0.5);
  47. this.progressMarkNode.x = markX;
  48. this.progressLabel.string = Math.floor(progress * 100);
  49. },
  50. // 进度
  51. setProgress (duration, progress) {
  52. this._totalTime = duration;
  53. this._currentTime = 0;
  54. this._progress = progress;
  55. if (duration == 0) {
  56. this._currentProgress = progress;
  57. this.updateUI();
  58. }
  59. }
  60. });