// 热更新进度条 cc.Class({ editor: { menu: '嘉米公用/JMLoadProgressBar' }, extends: cc.Component, properties: { progressBar: cc.ProgressBar, progressMarkNode: cc.Node, progressLabel: cc.Label, _totalTime: 0, _currentTime: 0, _progress: 0, _currentProgress: 0 }, onLoad () { this._totalTime = 0; this._currentTime = 0; this._progress = 0; this._currentProgress = 0; this.updateUI(); }, update (dt) { if (this._totalTime == 0) { return; } // 超时了,结束 if (this._totalTime < this._currentTime + dt) { this._totalTime = 0; this._currentTime = 0; this._currentProgress = this._progress; this.updateUI(); return; } let remainTime = this._totalTime - this._currentTime; // 必定大于0 let remainProgress = this._progress - this.progressBar.progress; let deltaProgress = dt * remainProgress / remainTime; this._currentProgress += deltaProgress; this._currentTime += dt; this.updateUI(); }, updateUI () { let progress = this._currentProgress; this.progressBar.progress = progress; let width = this.progressBar.node.width; let markX = width * (progress - 0.5); this.progressMarkNode.x = markX; this.progressLabel.string = Math.floor(progress * 100); }, // 进度 setProgress (duration, progress) { this._totalTime = duration; this._currentTime = 0; this._progress = progress; if (duration == 0) { this._currentProgress = progress; this.updateUI(); } } });