perf: 优化倒计时格式

This commit is contained in:
richarjiang
2026-04-24 08:46:58 +08:00
parent 4d699c127f
commit 8d54ffdbf8
2 changed files with 33 additions and 6 deletions

View File

@@ -14,3 +14,12 @@
## 提交与 Pull Request 规范
Git 历史采用 Conventional Commits且摘要多为中文例如 `feat: 支持分享关卡通关上报``fix: 修复关卡排序``docs: 添加设计文档`。请继续使用 `feat:``fix:``perf:``docs:` 前缀首行聚焦单一变更。PR 需说明改动范围、影响页面或模块、验证方式;涉及 UI 请附截图或录屏,涉及微信环境差异请写明复现条件与平台。
<claude-mem-context>
# Memory Context
# [mp-xieyingeng] recent context, 2026-04-24 8:45am GMT+8
No previous sessions found.
</claude-mem-context>

View File

@@ -21,6 +21,9 @@ export class PageLevel extends BaseView {
/** 静态常量:零位置 */
private static readonly ZERO_POS = new Vec3(0, 0, 0);
/** 默认体力上限,服务端未返回 max 时使用 */
private static readonly DEFAULT_STAMINA_MAX = 50;
// ========== 节点引用 ==========
@property(Node)
inputLayout: Node | null = null;
@@ -237,7 +240,7 @@ export class PageLevel extends BaseView {
}
// 提示用户消耗体力
ToastManager.show(`消耗1点体力剩余 ${enterData.stamina.current}/${enterData.stamina.max}`);
ToastManager.show(`消耗1点体力剩余 ${enterData.stamina.current}/${this._getStaminaMax(enterData.stamina)}`);
// 用 enter 接口返回的数据更新关卡配置(填充答案和线索)
LevelDataManager.instance.updateLevelDetails(
@@ -783,15 +786,27 @@ export class PageLevel extends BaseView {
/** 上次显示的体力值,用于变更检测 */
private _lastDisplayedStamina: number = -1;
/** 上次显示的体力上限,用于变更检测 */
private _lastDisplayedStaminaMax: number = -1;
/**
* 获取体力上限,服务端未返回时使用默认值兜底
*/
private _getStaminaMax(stamina: StaminaInfo): number {
return typeof stamina.max === 'number' ? stamina.max : PageLevel.DEFAULT_STAMINA_MAX;
}
/**
* 更新体力值显示(仅值变化时更新 UI
*/
private updateStaminaLabel(): void {
if (this.liveLabel) {
const stamina = StaminaManager.instance.getStamina();
if (stamina.current !== this._lastDisplayedStamina) {
this.liveLabel.string = `x ${stamina.current}`;
const maxStamina = this._getStaminaMax(stamina);
if (stamina.current !== this._lastDisplayedStamina || maxStamina !== this._lastDisplayedStaminaMax) {
this.liveLabel.string = `${stamina.current}/${maxStamina}`;
this._lastDisplayedStamina = stamina.current;
this._lastDisplayedStaminaMax = maxStamina;
}
}
}
@@ -803,7 +818,8 @@ export class PageLevel extends BaseView {
this._stopStaminaRecoverTimer();
const stamina = StaminaManager.instance.getStamina();
if (!stamina.nextRecoverAt || stamina.current >= stamina.max) {
const maxStamina = this._getStaminaMax(stamina);
if (!stamina.nextRecoverAt || stamina.current >= maxStamina) {
return;
}
@@ -815,11 +831,13 @@ export class PageLevel extends BaseView {
// 恢复一点体力
const currentStamina = StaminaManager.instance.getStamina();
const newCurrent = Math.min(currentStamina.current + 1, currentStamina.max);
const currentMaxStamina = this._getStaminaMax(currentStamina);
const newCurrent = Math.min(currentStamina.current + 1, currentMaxStamina);
const newStamina: StaminaInfo = {
...currentStamina,
max: currentMaxStamina,
current: newCurrent,
nextRecoverAt: newCurrent < currentStamina.max
nextRecoverAt: newCurrent < currentMaxStamina
? new Date(Date.now() + 10 * 60 * 1000).toISOString()
: null,
};