Files
Alien_Sniper/assets/scripts/ui/LoadingPanel.ts
T
2026-07-14 11:44:07 +08:00

72 lines
2.0 KiB
TypeScript

import { _decorator, Button, Component, Label, Node, Sprite, Tween, tween, Vec3 } from 'cc';
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
import { UIManager } from '../framework/ui/UIManager';
import { UISwitcher } from '../framework/ui/UISwitcher';
import { AudioMgr } from '../framework/audio/AudioMgr';
import { PanelBase } from '../framework/ui/PanelBase';
import { AssetController } from '../AssetController';
import { GameController } from '../GameController';
const { ccclass, property } = _decorator;
@ccclass('LoadingPanel')
export class LoadingPanel extends PanelBase {
static instance: LoadingPanel;
@property({ type: Sprite })
loadingSprite: Sprite = null;
@property
fillDuration: number = 5; // 填充持续时间,单位为秒
private fillAmount: number = 0; // 当前填充量
startFill() {
this.schedule(this.updateFill, 0.01); // 每0.01秒更新一次填充量
}
protected onOpen(): void {
LoadingPanel.instance.startFill()
}
loadingComplete: boolean = false
completeCallback = null
onLoadingComplete(callBack) {
this.completeCallback = callBack
this.loadingComplete = true
if (this.fillAmount < 1) {
this.fillDuration = 1
} else {
UIManager.instance.closePanel(LoadingPanel)
callBack()
}
}
protected onDestroy(): void {
this.unschedule(this.updateFill);
}
updateFill() {
if (this.fillAmount < 1) {
this.fillAmount += 0.01 / this.fillDuration; // 根据持续时间逐步增加填充量
this.loadingSprite.fillRange = this.fillAmount; // 更新 Sprite 的填充量
} else {
this.unschedule(this.updateFill); // 填充完成后停止更新
if (this.loadingComplete) {
UIManager.instance.closePanel(LoadingPanel)
this.completeCallback()
}
}
}
onLoad() {
LoadingPanel.instance = this;
}
}