670 lines
18 KiB
Markdown
670 lines
18 KiB
Markdown
# 奖励提示类型定义
|
||
|
||
<cite>
|
||
**本文档引用的文件**
|
||
- [Mission.ts](file://assets/script/game/common/config/Mission.ts)
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts)
|
||
- [Tooltip.ts](file://assets/script/game/skill/Tooltip.ts)
|
||
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts)
|
||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts)
|
||
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts)
|
||
</cite>
|
||
|
||
## 目录
|
||
1. [简介](#简介)
|
||
2. [TooltipTypes常量定义](#tooltiptypes常量定义)
|
||
3. [类型映射关系](#类型映射关系)
|
||
4. [UI奖励提示系统架构](#ui奖励提示系统架构)
|
||
5. [具体类型应用场景](#具体类型应用场景)
|
||
6. [代码实现分析](#代码实现分析)
|
||
7. [新增提示类型的配置步骤](#新增提示类型的配置步骤)
|
||
8. [常见集成问题及解决方案](#常见集成问题及解决方案)
|
||
9. [性能优化建议](#性能优化建议)
|
||
10. [总结](#总结)
|
||
|
||
## 简介
|
||
|
||
奖励提示系统是游戏中的重要视觉反馈机制,用于向玩家展示各种奖励效果和状态变化。本文档详细解析了Mission.ts中TooltipTypes常量的定义,说明了各种提示类型对应的数值标识及其在游戏中的实际应用场景,并解释了这些类型如何与UI奖励提示系统(如TooltipCom.ts)协同工作,实现不同奖励效果的视觉反馈。
|
||
|
||
## TooltipTypes常量定义
|
||
|
||
### 核心常量结构
|
||
|
||
TooltipTypes常量定义在Mission.ts文件中,采用简洁的对象字面量形式:
|
||
|
||
```typescript
|
||
export const TooltipTypes = {
|
||
life:1,
|
||
health:2,
|
||
skill:3,
|
||
crit:4,
|
||
uskill:5,
|
||
lvup:6,
|
||
apup:7,
|
||
hpup:8,
|
||
}
|
||
```
|
||
|
||
### 类型定义说明
|
||
|
||
| 类型名称 | 数值标识 | 描述 |
|
||
|---------|---------|------|
|
||
| life | 1 | 减少生命值提示 |
|
||
| health | 2 | 增加生命值提示 |
|
||
| skill | 3 | 技能激活提示 |
|
||
| crit | 4 | 暴击伤害提示 |
|
||
| uskill | 5 | 特殊技能效果提示 |
|
||
| lvup | 6 | 等级提升提示 |
|
||
| apup | 7 | 攻击力提升提示 |
|
||
| hpup | 8 | 生命值上限提升提示 |
|
||
|
||
**节来源**
|
||
- [Mission.ts](file://assets/script/game/common/config/Mission.ts#L44-L52)
|
||
|
||
## 类型映射关系
|
||
|
||
### 枚举与数值映射
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[TooltipTypes常量] --> B[life: 1]
|
||
A --> C[health: 2]
|
||
A --> D[skill: 3]
|
||
A --> E[crit: 4]
|
||
A --> F[uskill: 5]
|
||
A --> G[lvup: 6]
|
||
A --> H[apup: 7]
|
||
A --> I[hpup: 8]
|
||
B --> J[减少生命值效果]
|
||
C --> K[增加生命值效果]
|
||
D --> L[技能激活效果]
|
||
E --> M[特殊技能效果]
|
||
F --> N[等级提升效果]
|
||
G --> O[攻击力提升效果]
|
||
H --> P[生命值上限提升效果]
|
||
```
|
||
|
||
**图表来源**
|
||
- [Mission.ts](file://assets/script/game/common/config/Mission.ts#L44-L52)
|
||
|
||
### 对应的UI元素结构
|
||
|
||
每种类型对应不同的UI子节点和显示内容:
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[TooltipCom.start] --> B{stype判断}
|
||
B --> |1 - life| C[loss_life节点]
|
||
B --> |2 - health| D[add_life节点]
|
||
B --> |3 - skill| E[skill节点]
|
||
B --> |4 - crit| F[bloss节点]
|
||
B --> |5 - uskill| G[uskill节点]
|
||
B --> |6 - lvup| H[lvup节点]
|
||
B --> |7 - apup| I[apup节点]
|
||
B --> |8 - hpup| J[hpup节点]
|
||
C --> K[显示伤害数值]
|
||
D --> L[显示恢复数值]
|
||
E --> M[显示技能名称]
|
||
F --> N[显示暴击数值]
|
||
G --> O[显示特殊效果]
|
||
H --> P[显示升级效果]
|
||
I --> Q[显示攻击力提升]
|
||
J --> R[显示生命值提升]
|
||
```
|
||
|
||
**图表来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L26-L101)
|
||
|
||
## UI奖励提示系统架构
|
||
|
||
### 系统组件关系
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class Tooltip {
|
||
+TooltipView : TooltipCom
|
||
+load(pos, type, value, s_uuid, parent, cd)
|
||
+destroy()
|
||
}
|
||
class TooltipCom {
|
||
+stype : number
|
||
+value : string
|
||
+s_uuid : number
|
||
+alive_time : number
|
||
+start()
|
||
+do_up()
|
||
+to_destroy()
|
||
+reset()
|
||
}
|
||
class BuffComp {
|
||
+tooltip(type, value, s_uuid, y)
|
||
+hp_tip(type, value, s_uuid, y)
|
||
+show_shield(shield, shield_max)
|
||
+hp_show(hp, hp_max)
|
||
+ap_up()
|
||
+lv_up()
|
||
}
|
||
class HeroViewComp {
|
||
+do_atked(remainingDamage, CAttrs, s_uuid)
|
||
+check_dodge()
|
||
+check_crit(crit)
|
||
+playSkillEffect(skill_id)
|
||
+showDamage(damage, isCrit, anm)
|
||
}
|
||
Tooltip --> TooltipCom : "管理"
|
||
BuffComp --> Tooltip : "使用"
|
||
HeroViewComp --> BuffComp : "调用"
|
||
HeroViewComp --> Tooltip : "直接调用"
|
||
```
|
||
|
||
**图表来源**
|
||
- [Tooltip.ts](file://assets/script/game/skill/Tooltip.ts#L10-L30)
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L12-L25)
|
||
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts#L10-L30)
|
||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L540-L580)
|
||
|
||
### 数据流向
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Player as 玩家操作
|
||
participant Hero as HeroViewComp
|
||
participant Buff as BuffComp
|
||
participant Tooltip as Tooltip
|
||
participant Com as TooltipCom
|
||
Player->>Hero : 触发事件(攻击/技能/死亡等)
|
||
Hero->>Hero : 计算结果
|
||
Hero->>Buff : 调用tooltip()方法
|
||
Buff->>Tooltip : 获取Tooltip实体
|
||
Tooltip->>Tooltip : 加载预制件
|
||
Tooltip->>Com : 创建TooltipCom实例
|
||
Com->>Com : 根据stype设置UI
|
||
Com->>Com : 启动动画和定时器
|
||
Com->>Com : 自动销毁
|
||
```
|
||
|
||
**图表来源**
|
||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L540-L580)
|
||
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts#L185-L210)
|
||
- [Tooltip.ts](file://assets/script/game/skill/Tooltip.ts#L35-L49)
|
||
|
||
**节来源**
|
||
- [Tooltip.ts](file://assets/script/game/skill/Tooltip.ts#L10-L49)
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L12-L101)
|
||
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts#L10-L210)
|
||
|
||
## 具体类型应用场景
|
||
|
||
### life类型 - 减少生命值提示
|
||
|
||
**应用场景:**
|
||
- 英雄受到伤害时显示
|
||
- 怪物攻击玩家时显示
|
||
- 各种负面效果造成的伤害
|
||
|
||
**实现特点:**
|
||
- 使用`loss_life`节点显示
|
||
- 数值显示在`hp`标签中
|
||
- 动画效果:从当前位置向上移动
|
||
- 持续时间:0.5秒后自动销毁
|
||
|
||
**节来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L26-L33)
|
||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L774)
|
||
|
||
### health类型 - 增加生命值提示
|
||
|
||
**应用场景:**
|
||
- 回复技能效果
|
||
- 治疗道具使用
|
||
- 生命值恢复效果
|
||
|
||
**实现特点:**
|
||
- 使用`add_life`节点显示
|
||
- 数值显示在`hp`标签中
|
||
- 层级索引:110(高于其他提示)
|
||
- 动画效果:从当前位置向上移动
|
||
|
||
**节来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L35-L42)
|
||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L540-L550)
|
||
|
||
### skill类型 - 技能激活提示
|
||
|
||
**应用场景:**
|
||
- 主要技能激活
|
||
- 技能冷却完成
|
||
- 特殊技能触发
|
||
|
||
**实现特点:**
|
||
- 使用`skill`节点显示
|
||
- 显示技能名称(从SkillSet获取)
|
||
- 位置偏移:y坐标+30
|
||
- 持续时间:0.5秒
|
||
|
||
**节来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L52-L60)
|
||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L730)
|
||
|
||
### crit类型 - 暴击伤害提示
|
||
|
||
**应用场景:**
|
||
- 暴击攻击造成伤害
|
||
- 暴击回复效果
|
||
- 暴击触发的特殊效果
|
||
|
||
**实现特点:**
|
||
- 使用`bloss`节点显示
|
||
- 数值显示在`hp`标签中
|
||
- 层级索引:200(最高层级)
|
||
- 动画效果:从当前位置向上移动
|
||
|
||
**节来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L43-L50)
|
||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L771)
|
||
|
||
### uskill类型 - 特殊技能效果提示
|
||
|
||
**应用场景:**
|
||
- 闪避成功
|
||
- 护盾吸收伤害
|
||
- 其他特殊技能效果
|
||
|
||
**实现特点:**
|
||
- 使用`uskill`节点显示
|
||
- 直接显示预设文本(如"*吸收*"、"*闪避*")
|
||
- 位置偏移:y坐标+30
|
||
- 持续时间:0.5秒
|
||
|
||
**节来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L60-L68)
|
||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L667)
|
||
|
||
### lvup类型 - 等级提升提示
|
||
|
||
**应用场景:**
|
||
- 英雄等级提升
|
||
- 经验值达到新等级
|
||
- 系统通知等级变化
|
||
|
||
**实现特点:**
|
||
- 使用`lvup`节点显示
|
||
- 位置偏移:y坐标-30
|
||
- 持续时间:0.5秒
|
||
- (注:当前实现中未显示具体数值)
|
||
|
||
**节来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L68-L76)
|
||
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts#L110-L115)
|
||
|
||
### apup类型 - 攻击力提升提示
|
||
|
||
**应用场景:**
|
||
- 攻击力属性提升
|
||
- 攻击力增益效果
|
||
- 装备强化效果
|
||
|
||
**实现特点:**
|
||
- 使用`apup`节点显示
|
||
- 数值显示在`num`标签中,带"+"前缀
|
||
- 位置偏移:y坐标-60
|
||
- 持续时间:0.5秒
|
||
|
||
**节来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L76-L84)
|
||
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts#L115-L120)
|
||
|
||
### hpup类型 - 生命值上限提升提示
|
||
|
||
**应用场景:**
|
||
- 生命值上限增加
|
||
- 生命值成长效果
|
||
- 生命值相关增益
|
||
|
||
**实现特点:**
|
||
- 使用`hpup`节点显示
|
||
- 数值显示在`num`标签中,带"+"前缀
|
||
- 位置偏移:y坐标-60
|
||
- 持续时间:0.5秒
|
||
|
||
**节来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L84-L92)
|
||
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts#L120-L125)
|
||
|
||
## 代码实现分析
|
||
|
||
### TooltipCom核心逻辑
|
||
|
||
TooltipCom组件负责具体的UI显示逻辑,其核心switch语句处理不同类型:
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[TooltipCom.start] --> B[接收stype参数]
|
||
B --> C{switch(stype)}
|
||
C --> |1| D[life类型处理]
|
||
C --> |2| E[health类型处理]
|
||
C --> |3| F[skill类型处理]
|
||
C --> |4| G[crit类型处理]
|
||
C --> |5| H[uskill类型处理]
|
||
C --> |6| I[lvup类型处理]
|
||
C --> |7| J[apup类型处理]
|
||
C --> |8| K[hpup类型处理]
|
||
D --> L[设置位置和层级]
|
||
D --> M[显示loss_life节点]
|
||
D --> N[设置数值文本]
|
||
D --> O[启动定时器销毁]
|
||
E --> P[设置层级110]
|
||
E --> Q[显示add_life节点]
|
||
E --> R[设置数值文本]
|
||
E --> S[启动定时器销毁]
|
||
F --> T[显示skill节点]
|
||
F --> U[设置技能名称]
|
||
F --> V[调整位置]
|
||
F --> W[启动定时器销毁]
|
||
G --> X[设置层级200]
|
||
G --> Y[显示bloss节点]
|
||
G --> Z[设置数值文本]
|
||
G --> AA[启动定时器销毁]
|
||
H --> BB[显示uskill节点]
|
||
H --> CC[设置预设文本]
|
||
H --> DD[调整位置]
|
||
H --> EE[启动定时器销毁]
|
||
I --> FF[显示lvup节点]
|
||
I --> GG[调整位置]
|
||
I --> HH[启动定时器销毁]
|
||
J --> II[显示apup节点]
|
||
J --> JJ[设置带+的数值]
|
||
J --> KK[调整位置]
|
||
J --> LL[启动定时器销毁]
|
||
K --> MM[显示hpup节点]
|
||
K --> NN[设置带+的数值]
|
||
K --> OO[调整位置]
|
||
K --> PP[启动定时器销毁]
|
||
```
|
||
|
||
**图表来源**
|
||
- [TooltipCom.ts](file://assets/script/game/skill/TooltipCom.ts#L26-L101)
|
||
|
||
### Tooltip加载流程
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Client as 调用方
|
||
participant Tooltip as Tooltip实体
|
||
participant ResMgr as 资源管理器
|
||
participant Prefab as 提示预制件
|
||
participant Com as TooltipCom组件
|
||
Client->>Tooltip : load(pos, type, value, s_uuid, parent)
|
||
Tooltip->>ResMgr : 获取"game/skill/buff/tooltip"预制件
|
||
ResMgr-->>Tooltip : 返回Prefab实例
|
||
Tooltip->>Prefab : instantiate(prefab)
|
||
Prefab-->>Tooltip : 返回Node实例
|
||
Tooltip->>Tooltip : 设置父节点和位置
|
||
Tooltip->>Tooltip : 检查父节点缩放
|
||
Tooltip->>Com : 获取TooltipCom组件
|
||
Tooltip->>Com : 设置stype、value、s_uuid、alive_time
|
||
Tooltip->>Tooltip : 添加到实体
|
||
Tooltip-->>Client : 完成加载
|
||
```
|
||
|
||
**图表来源**
|
||
- [Tooltip.ts](file://assets/script/game/skill/Tooltip.ts#L35-L49)
|
||
|
||
### BuffComp工具方法
|
||
|
||
BuffComp提供了两个主要的工具方法来简化Tooltip的使用:
|
||
|
||
#### tooltip()方法
|
||
- 通用提示方法
|
||
- 参数:type(类型)、value(数值)、s_uuid(技能UUID)、y(垂直偏移)
|
||
- 位置计算:基于节点的相对位置
|
||
|
||
#### hp_tip()方法
|
||
- 生命值相关提示专用方法
|
||
- 参数:type(类型)、value(数值)、s_uuid(技能UUID)、y(垂直偏移)
|
||
- 位置计算:基于节点高度的绝对位置
|
||
|
||
**节来源**
|
||
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts#L185-L210)
|
||
|
||
## 新增提示类型的配置步骤
|
||
|
||
### 步骤1:修改TooltipTypes常量
|
||
|
||
在Mission.ts中添加新的类型定义:
|
||
|
||
```typescript
|
||
export const TooltipTypes = {
|
||
// ... 现有类型
|
||
newType: 9, // 新增类型,使用下一个可用数值
|
||
}
|
||
```
|
||
|
||
### 步骤2:更新TooltipCom处理逻辑
|
||
|
||
在TooltipCom.ts的switch语句中添加新的case分支:
|
||
|
||
```typescript
|
||
case TooltipTypes.newType:
|
||
this.node.getChildByName("newType").getChildByName("value").getComponent(Label).string = this.value;
|
||
this.node.getChildByName("newType").active = true;
|
||
this.node.setPosition(v3(this.node.position.x, this.node.position.y + offset));
|
||
this.scheduleOnce(() => {
|
||
this.ent.destroy()
|
||
}, this.alive_time);
|
||
break
|
||
```
|
||
|
||
### 步骤3:创建对应的UI节点
|
||
|
||
在提示预制件中添加新的UI节点:
|
||
- 在Canvas下创建名为`newType`的子节点
|
||
- 添加必要的子节点(如数值显示标签)
|
||
- 设置适当的层级和初始状态
|
||
|
||
### 步骤4:测试和验证
|
||
|
||
1. **功能测试**:确保新类型能够正确显示
|
||
2. **层级测试**:验证显示层级是否符合预期
|
||
3. **动画测试**:确认动画效果正常
|
||
4. **性能测试**:检查是否存在性能问题
|
||
|
||
### 注意事项
|
||
|
||
1. **数值唯一性**:确保每个类型的数值都是唯一的
|
||
2. **层级管理**:合理设置显示层级,避免遮挡
|
||
3. **资源管理**:及时销毁不需要的提示对象
|
||
4. **兼容性**:确保新类型与现有系统兼容
|
||
5. **国际化**:如果支持多语言,考虑文本本地化
|
||
|
||
## 常见集成问题及解决方案
|
||
|
||
### 问题1:提示显示位置不正确
|
||
|
||
**症状**:提示出现在错误的位置
|
||
|
||
**原因**:
|
||
- 父节点变换影响
|
||
- 缩放比例问题
|
||
- 坐标系转换错误
|
||
|
||
**解决方案**:
|
||
```typescript
|
||
// 在Tooltip.ts中已处理
|
||
if(parent.scale.x < 0){
|
||
node.setScale(-node.scale.x, node.scale.y, 0);
|
||
}
|
||
```
|
||
|
||
### 问题2:提示层级混乱
|
||
|
||
**症状**:某些提示被其他UI元素遮挡
|
||
|
||
**原因**:
|
||
- 层级索引设置不当
|
||
- 动态层级管理缺失
|
||
|
||
**解决方案**:
|
||
```typescript
|
||
// 在TooltipCom.ts中已处理
|
||
case TooltipTypes.health:
|
||
this.node.setSiblingIndex(110); // 明确设置层级
|
||
break
|
||
```
|
||
|
||
### 问题3:提示消失过快或过慢
|
||
|
||
**症状**:提示持续时间不符合预期
|
||
|
||
**原因**:
|
||
- alive_time设置不当
|
||
- 销毁时机错误
|
||
|
||
**解决方案**:
|
||
```typescript
|
||
// 在Tooltip.ts中统一设置
|
||
sv.alive_time = 0.5; // 统一的持续时间
|
||
```
|
||
|
||
### 问题4:内存泄漏
|
||
|
||
**症状**:长时间运行后出现内存占用过高
|
||
|
||
**原因**:
|
||
- 提示对象未正确销毁
|
||
- 事件监听器未清理
|
||
|
||
**解决方案**:
|
||
```typescript
|
||
// 在TooltipCom.ts中确保正确销毁
|
||
scheduleOnce(() => {
|
||
this.ent.destroy()
|
||
}, this.alive_time);
|
||
```
|
||
|
||
### 问题5:动画效果异常
|
||
|
||
**症状**:提示动画不流畅或不正确
|
||
|
||
**原因**:
|
||
- Tween动画配置错误
|
||
- 更新频率不匹配
|
||
|
||
**解决方案**:
|
||
```typescript
|
||
// 在TooltipCom.ts中使用正确的动画配置
|
||
tween(this.node).to(
|
||
this.alive_time,
|
||
{ position: v3(this.node.position.x, this.node.position.y + 60) },
|
||
{
|
||
onComplete: () => { this.ent.destroy() },
|
||
easing: "linear"
|
||
}
|
||
).start()
|
||
```
|
||
|
||
## 性能优化建议
|
||
|
||
### 1. 对象池化
|
||
|
||
对于频繁使用的提示类型,可以考虑使用对象池:
|
||
|
||
```typescript
|
||
class TooltipPool {
|
||
private pool: TooltipCom[] = [];
|
||
|
||
public acquire(): TooltipCom {
|
||
if (this.pool.length > 0) {
|
||
return this.pool.pop()!;
|
||
}
|
||
return new TooltipCom();
|
||
}
|
||
|
||
public release(tooltip: TooltipCom): void {
|
||
// 重置状态
|
||
tooltip.reset();
|
||
this.pool.push(tooltip);
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 批量处理
|
||
|
||
对于连续的相同类型提示,可以考虑批量处理:
|
||
|
||
```typescript
|
||
private damageQueue: DamageInfo[] = [];
|
||
|
||
public showDamage(damage: number, isCrit: boolean, anm: string = "atked") {
|
||
this.damageQueue.push({
|
||
damage,
|
||
isCrit,
|
||
delay: this.damageInterval,
|
||
anm
|
||
});
|
||
}
|
||
|
||
private processDamageQueue() {
|
||
if (this.isProcessingDamage || this.damageQueue.length === 0) return;
|
||
|
||
this.isProcessingDamage = true;
|
||
const damageInfo = this.damageQueue.shift()!;
|
||
|
||
this.showDamageImmediate(damageInfo.damage, damageInfo.isCrit, damageInfo.anm);
|
||
|
||
this.scheduleOnce(() => {
|
||
this.isProcessingDamage = false;
|
||
}, this.damageInterval);
|
||
}
|
||
```
|
||
|
||
### 3. 条件渲染
|
||
|
||
对于某些不常用的提示类型,可以考虑延迟加载:
|
||
|
||
```typescript
|
||
private cachedNodes: Map<number, Node> = new Map();
|
||
|
||
private getCachedNode(type: number): Node {
|
||
if (!this.cachedNodes.has(type)) {
|
||
// 延迟加载UI节点
|
||
const node = this.createNodeForType(type);
|
||
this.cachedNodes.set(type, node);
|
||
}
|
||
return this.cachedNodes.get(type)!;
|
||
}
|
||
```
|
||
|
||
### 4. 异步加载
|
||
|
||
对于大型UI资源,可以考虑异步加载:
|
||
|
||
```typescript
|
||
async loadTooltipAsync(type: number, pos: Vec3, value: string, s_uuid: number, parent: any) {
|
||
// 异步加载UI资源
|
||
const prefab = await oops.res.getAsync("game/skill/buff/tooltip", Prefab);
|
||
// 继续后续逻辑...
|
||
}
|
||
```
|
||
|
||
## 总结
|
||
|
||
奖励提示系统是游戏体验的重要组成部分,通过TooltipTypes常量定义的八种提示类型,系统能够有效地向玩家传达各种游戏状态和奖励信息。
|
||
|
||
### 关键特性
|
||
|
||
1. **类型化设计**:通过数值化的类型系统,实现了清晰的功能分类
|
||
2. **灵活的UI适配**:每种类型都有专门的UI节点和显示逻辑
|
||
3. **良好的扩展性**:新增类型只需遵循既定的配置步骤
|
||
4. **完善的生命周期管理**:自动化的创建和销毁机制
|
||
5. **丰富的应用场景**:覆盖了游戏中的各种奖励和状态变化
|
||
|
||
### 最佳实践
|
||
|
||
1. **合理使用类型**:根据具体场景选择合适的提示类型
|
||
2. **注意层级管理**:确保提示不会被其他UI元素遮挡
|
||
3. **控制显示时机**:避免过多的提示同时显示
|
||
4. **关注性能表现**:对于高频使用的提示类型进行优化
|
||
5. **保持一致性**:确保相似效果使用相同的提示类型
|
||
|
||
通过深入理解和正确使用这个奖励提示系统,开发者可以为玩家创造更加丰富和直观的游戏体验。 |