refactor(ui, talent): 重构图标加载逻辑并简化天赋文案

统一使用全局smc.uiconsAtlas缓存图标图集,移除各组件本地的缓存逻辑与变量
简化CardComp、SkillBoxComp的图标更新代码,删除冗余的异步加载步骤
将两处天赋名称简化,去掉多余的“额外”描述
This commit is contained in:
walkpan
2026-05-11 19:40:39 +08:00
parent 2413e4d1cc
commit 750e86e858
4 changed files with 12 additions and 35 deletions

View File

@@ -56,9 +56,9 @@ export const TalentConfig = {
maxLevel: 5, values: [2, 4, 6, 8, 10], costs: [1, 1, 2, 2, 3] }, maxLevel: 5, values: [2, 4, 6, 8, 10], costs: [1, 1, 2, 2, 3] },
{ id: TalentType.Puncture, name: "穿刺", icon: "1006", desc: "+{value}", { id: TalentType.Puncture, name: "穿刺", icon: "1006", desc: "+{value}",
maxLevel: 5, values: [0.2, 0.4, 0.6, 0.8, 1.0], costs: [1, 1, 2, 2, 3] }, maxLevel: 5, values: [0.2, 0.4, 0.6, 0.8, 1.0], costs: [1, 1, 2, 2, 3] },
{ id: TalentType.DeadTrigger, name: "亡语额外触发", icon: "1006", desc: "+{value}次", { id: TalentType.DeadTrigger, name: "亡语触发", icon: "1006", desc: "+{value}次",
maxLevel: 1, values: [1], costs: [25] }, maxLevel: 1, values: [1], costs: [25] },
{ id: TalentType.Summon, name: "召唤额外触发", icon: "1006", desc: "+{value}次", { id: TalentType.Summon, name: "召唤触发", icon: "1006", desc: "+{value}次",
maxLevel: 1, values: [1], costs: [25] }, maxLevel: 1, values: [1], costs: [25] },
{ id: TalentType.BuyDiscount, name: "购买优惠", icon: "1006", desc: "-{value}金币", { id: TalentType.BuyDiscount, name: "购买优惠", icon: "1006", desc: "-{value}金币",
maxLevel: 1, values: [1], costs: [10] }, maxLevel: 1, values: [1], costs: [10] },

View File

@@ -29,6 +29,7 @@ import { SkillSet } from "../common/config/SkillSet";
import { GameEvent } from "../common/config/GameEvent"; import { GameEvent } from "../common/config/GameEvent";
import { oops } from "db://oops-framework/core/Oops"; import { oops } from "db://oops-framework/core/Oops";
import { smc } from "../common/SingletonModuleComp"; import { smc } from "../common/SingletonModuleComp";
import { UIID } from "../common/config/GameUIConfig"; import { UIID } from "../common/config/GameUIConfig";
import { HeroAttrsComp } from "../hero/HeroAttrsComp"; import { HeroAttrsComp } from "../hero/HeroAttrsComp";
import { TalentType } from "../common/config/TalentSet"; import { TalentType } from "../common/config/TalentSet";
@@ -102,8 +103,6 @@ export class CardComp extends CCComp {
card_uuid:number=0 card_uuid:number=0
/** 是否处于锁定状态(锁定且有卡时,抽卡分发会被跳过) */ /** 是否处于锁定状态(锁定且有卡时,抽卡分发会被跳过) */
private isLocked: boolean = false; private isLocked: boolean = false;
/** 图标图集缓存(首次加载后复用,避免重复 IO */
private uiconsAtlas: SpriteAtlas | null = null;
/** 当前槽位承载的卡牌数据null 表示空槽 */ /** 当前槽位承载的卡牌数据null 表示空槽 */
private cardData: CardConfig | null = null; private cardData: CardConfig | null = null;
/** 上划使用阈值(像素):拖拽距离 >= 此值视为"使用卡牌" */ /** 上划使用阈值(像素):拖拽距离 >= 此值视为"使用卡牌" */
@@ -194,7 +193,7 @@ export class CardComp extends CCComp {
} }
/** /**
* 更新卡牌图标:先尝试从缓存图集获取,未缓存则异步加载图集获取 * 更新卡牌图标:从全局缓存图集获取对应帧
* @param node 图标所在节点 * @param node 图标所在节点
* @param iconId 图标在 SpriteAtlas 中的帧名称 * @param iconId 图标在 SpriteAtlas 中的帧名称
*/ */
@@ -202,30 +201,11 @@ export class CardComp extends CCComp {
if (!node || !iconId) return; if (!node || !iconId) return;
const sprite = node.getComponent(Sprite) || node.getComponentInChildren(Sprite); const sprite = node.getComponent(Sprite) || node.getComponentInChildren(Sprite);
if (!sprite) return; if (!sprite) return;
// 已缓存图集 → 直接获取帧 // 已全局缓存图集 → 直接获取帧
if (this.uiconsAtlas) { if (smc.uiconsAtlas) {
const frame = this.uiconsAtlas.getSpriteFrame(iconId); const frame = smc.uiconsAtlas.getSpriteFrame(iconId);
if (frame) { sprite.spriteFrame = frame || null;
sprite.spriteFrame = frame;
} else {
sprite.spriteFrame = null;
} }
return;
}
// 首次加载图集
resources.load("gui/uicons", SpriteAtlas, (err, atlas) => {
if (err || !atlas) {
mLogger.log(this.debugMode, "CardComp", "load uicons atlas failed", err);
return;
}
this.uiconsAtlas = atlas;
const frame = atlas.getSpriteFrame(iconId);
if (frame) {
sprite.spriteFrame = frame;
} else {
sprite.spriteFrame = null;
}
});
} }
/** /**

View File

@@ -121,8 +121,6 @@ export class MissionCardComp extends CCComp {
/** 当前是否为战斗阶段 */ /** 当前是否为战斗阶段 */
private isBattlePhase: boolean = false; private isBattlePhase: boolean = false;
/** 预留图集缓存(后续接入按钮/卡面图标时复用) */
private uiconsAtlas: SpriteAtlas | null = null;
/** 四个槽位对应的 CardComp 控制器缓存(有序数组) */ /** 四个槽位对应的 CardComp 控制器缓存(有序数组) */
private cardComps: CardComp[] = []; private cardComps: CardComp[] = [];
/** 当前卡池等级(仅影响抽卡来源,不直接改卡槽现有内容) */ /** 当前卡池等级(仅影响抽卡来源,不直接改卡槽现有内容) */

View File

@@ -151,14 +151,13 @@ export class SkillBoxComp extends CCComp {
// 加载技能图标 // 加载技能图标
if (this.icon_node) { if (this.icon_node) {
const iconId = SkillSet[this.s_uuid]?.icon || `${this.s_uuid}`; const iconId = SkillSet[this.s_uuid]?.icon || `${this.s_uuid}`;
resources.load("gui/uicons", SpriteAtlas, (err, atlas) => { if (smc.uiconsAtlas) {
if (err || !atlas) return; const frame = smc.uiconsAtlas.getSpriteFrame(iconId);
const frame = atlas.getSpriteFrame(iconId);
if (frame && this.icon_node && this.icon_node.isValid) { if (frame && this.icon_node && this.icon_node.isValid) {
const sprite = this.icon_node.getComponent(Sprite) || this.icon_node.addComponent(Sprite); let sprite = this.icon_node.getComponent(Sprite) || this.icon_node.addComponent(Sprite);
sprite.spriteFrame = frame; sprite.spriteFrame = frame;
} }
}); }
} }
// 更新剩余次数标签 // 更新剩余次数标签