/** * @file TopComp.ts * @description 顶部 UI 栏组件 * * 职责: * 1. 监听 GOLD_UPDATE 事件,当金币数量变化时播放数字弹跳动画。 * 2. 该组件挂载在顶部 HUD 节点上,管理金币图标和数值的视觉反馈。 * * 关键设计: * - 使用 tween 对金币数字节点执行 scale 弹跳动画(放大 → 回缩), * 提供视觉提示告知玩家金币变化。 * * 依赖: * - GameEvent.GOLD_UPDATE —— 全局金币更新事件 * - oops.message —— 全局事件总线 */ import { _decorator, Component, Label, Node, tween, v3 } from 'cc'; import { GameEvent } from '../common/config/GameEvent'; import { smc } from '../common/SingletonModuleComp'; import { BoxSet, NumberFormatter } from '../common/config/GameSet'; import { oops } from 'db://oops-framework/core/Oops'; const { ccclass, property } = _decorator; /** * topComp —— 顶部 UI 栏 * * 监听金币变化事件,对金币数值标签播放弹跳反馈动画。 */ @ccclass('topComp') export class topComp extends Component { /** 注册金币更新事件监听 */ protected onLoad(): void { oops.message.on(GameEvent.GOLD_UPDATE,this.onGoldUpdate,this); } start() { } /** * 金币更新事件回调: * 对 bar/gold/num 节点播放 scale 弹跳动画, * 先放大到 1.2 再回缩到 1.0。 * * @param event 事件名 * @param data 事件数据(当前未使用) */ onGoldUpdate(event:string,data:any){ tween(this.node.getChildByName("bar").getChildByName("gold").getChildByName("num").getComponent(Label).node) .to(0.1,{scale:v3(1.2,1.2,1)}) .to(0.1,{scale:v3(1,1,1)}) .start() } /** 销毁时移除事件监听 */ onDestroy(){ oops.message.off(GameEvent.GOLD_UPDATE,this.onGoldUpdate,this); } update(deltaTime: number) { } }