wiki更新

This commit is contained in:
panw
2025-10-30 16:49:19 +08:00
parent 40e0086be3
commit 93ceaa70e4
18 changed files with 746 additions and 1100 deletions

View File

@@ -4,7 +4,7 @@
**本文档引用的文件**
- [Mission.ts](file://assets/script/game/common/config/Mission.ts)
- [Tasks.ts](file://assets/script/game/common/config/Tasks.ts)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts) - *最近提交中已更新*
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts)
@@ -17,6 +17,13 @@
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
</cite>
## 更新摘要
**已做更改**
- 更新了“核心组件分析”中关于MissionComp的实体销毁逻辑说明
- 修正了“性能优化考虑”中关于组件清理的描述
- 移除了过时的故障排除建议,增加了针对空引用问题的解决方案
- 所有文件引用和标题均已转换为中文
## 目录
1. [简介](#简介)
2. [系统架构概览](#系统架构概览)
@@ -524,6 +531,31 @@ do_reward() {
2. **随机数优化**:使用高效的随机数生成算法
3. **数据结构优化**:使用合适的数据结构提高查找效率
### 实体销毁优化
根据最近的代码提交MissionComp中的实体销毁逻辑已优化
```typescript
private cleanComponents() {
// 优化销毁顺序直接销毁实体让ECS系统自动处理组件清理
// 这样可以避免在组件reset方法中访问已经被销毁的实体引用
ecs.query(ecs.allOf(HeroViewComp)).forEach(entity => {
entity.destroy();
});
ecs.query(ecs.allOf(AtkConCom)).forEach(entity => {
entity.destroy();
});
ecs.query(ecs.allOf(SkillViewCom)).forEach(entity => {
entity.destroy();
});
}
```
此更改修复了实体销毁时可能出现的空引用问题,确保在清理过程中不会访问已被销毁的实体。
**节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L137-L149) - *最近提交中已更新*
## 故障排除指南
### 常见问题及解决方案
@@ -580,35 +612,36 @@ validateRewardWeights() {
}
```
#### 性能问题
#### 实体销毁空引用问题
**症状**奖励生成过程卡顿
**症状**在组件清理过程中出现空引用错误
**原因分析**
1. 奖励算法复杂度过高
2. 数据库查询频繁
3. UI渲染过于复杂
1. 组件清理顺序不当
2. 在reset方法中访问已被销毁的实体
**解决方案**
```typescript
// 优化奖励生成算
async generateRewardsOptimized() {
// 使用Web Worker异步处
const worker = new Worker('reward_worker.js');
worker.postMessage({
monsters: this.monsters,
heroes: this.heroes,
difficulty: this.difficulty
// 优化后的实体销毁方
private cleanComponents() {
// 直接销毁实体让ECS系统自动处理组件清
ecs.query(ecs.allOf(HeroViewComp)).forEach(entity => {
entity.destroy();
});
ecs.query(ecs.allOf(AtkConCom)).forEach(entity => {
entity.destroy();
});
ecs.query(ecs.allOf(SkillViewCom)).forEach(entity => {
entity.destroy();
});
worker.onmessage = (e) => {
this.rewards = e.data;
this.displayRewards();
};
}
```
此解决方案通过直接销毁实体而非逐个清理组件避免了在组件reset方法中访问已被销毁实体的问题。
**节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L137-L149) - *最近提交中已更新*
## 总结
奖励系统是本游戏的核心机制,通过精心设计的三选一奖励选择模式,为玩家提供了丰富的策略选择空间。系统采用模块化架构,各组件职责明确,通过事件驱动的方式实现松耦合设计。