refactor(hero): 优化护盾系统日志与显示逻辑
1. 新增多处护盾相关调试日志,方便追踪护盾数值变化 2. 重构HeroAttrsComp的add_shield方法,统一日志输出格式 3. 重写HeroTopBarComp的护盾显示逻辑,改为直接显示数值而非按上限比例 4. 为HeroViewComp新增护盾特效管理,实现护盾状态自动显隐 5. 清理hk1.prefab中冗余的预制体覆盖配置
This commit is contained in:
@@ -140,7 +140,13 @@ export class HeroViewComp extends CCComp {
|
||||
|
||||
|
||||
if (this.model.dirty_shield) {
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `update dirty_shield: shield=${this.model.shield}, calling shieldShow`);
|
||||
this.topBar.shieldShow(this.model.shield);
|
||||
// 护盾耗尽时隐藏护盾特效
|
||||
if (this.model.shield <= 0) {
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `update dirty_shield: shield <= 0, hiding shield fx`);
|
||||
this.hideShieldFx();
|
||||
}
|
||||
this.model.dirty_shield = false;
|
||||
}
|
||||
|
||||
@@ -309,9 +315,43 @@ export class HeroViewComp extends CCComp {
|
||||
this.as.move();
|
||||
}
|
||||
}
|
||||
/** 护盾常驻特效节点,避免重复创建 */
|
||||
private shieldFxNode: Node | null = null;
|
||||
|
||||
add_shield(shield: number) {
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `add_shield called, shield=${shield}, model.shield=${this.model?.shield}, model exists=${!!this.model}`);
|
||||
// 护盾数据更新由 Model 层处理,这里只负责视图表现
|
||||
if (this.model && this.model.shield > 0) this.topBar.shieldShow(this.model.shield);
|
||||
if (this.model && this.model.shield > 0) {
|
||||
this.topBar.shieldShow(this.model.shield);
|
||||
this.showShieldFx();
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `add_shield: showing shield fx, model.shield=${this.model.shield}`);
|
||||
} else {
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `add_shield: skipped, model.shield=${this.model?.shield}`);
|
||||
}
|
||||
}
|
||||
|
||||
/** 显示护盾常驻特效(使用 this.node 下已放置的 shielded 节点) */
|
||||
private showShieldFx() {
|
||||
if (!this.shieldFxNode) {
|
||||
this.shieldFxNode = this.node.getChildByName("shielded");
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `showShieldFx: found shielded node=${!!this.shieldFxNode}`);
|
||||
}
|
||||
if (this.shieldFxNode && !this.shieldFxNode.active) {
|
||||
this.shieldFxNode.active = true;
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `showShieldFx: activated shielded node`);
|
||||
} else {
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `showShieldFx: shielded node already active or not found, active=${this.shieldFxNode?.active}`);
|
||||
}
|
||||
}
|
||||
|
||||
/** 隐藏护盾常驻特效 */
|
||||
private hideShieldFx() {
|
||||
if (this.shieldFxNode && this.shieldFxNode.active) {
|
||||
this.shieldFxNode.active = false;
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `hideShieldFx: deactivated shielded node`);
|
||||
} else {
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', `hideShieldFx: shielded node not active or not found, active=${this.shieldFxNode?.active}`);
|
||||
}
|
||||
}
|
||||
|
||||
health(hp: number = 0) {
|
||||
@@ -329,6 +369,7 @@ export class HeroViewComp extends CCComp {
|
||||
this.model.is_dead = false
|
||||
this.model.is_count_dead = false
|
||||
this.deadCD = 0;
|
||||
this.hideShieldFx();
|
||||
|
||||
// 恢复碰撞体
|
||||
const collider = this.node.getComponent(Collider2D);
|
||||
@@ -493,6 +534,7 @@ export class HeroViewComp extends CCComp {
|
||||
}
|
||||
reset() {
|
||||
this.isCastingMax = false;
|
||||
this.hideShieldFx();
|
||||
// 清理残留的定时器和缓动
|
||||
this.unscheduleAllCallbacks();
|
||||
Tween.stopAllByTarget(this.node);
|
||||
|
||||
Reference in New Issue
Block a user