敌人属性配置修复说明.md 4.4 KB

敌人属性配置修复说明

问题描述

之前的敌人系统存在以下问题:

  1. 敌人属性使用硬编码的默认值,而不是从JSON配置文件中读取
  2. EnemyInstance.ts 中的属性初始化逻辑不正确
  3. 配置文件的嵌套结构没有被正确解析

修复内容

1. 修改 EnemyInstance.ts

属性默认值修改

// 修改前:硬编码默认值
public health: number = 30;
public maxHealth: number = 30;
public speed: number = 50;
public attackPower: number = 10;
public attackInterval: number = 2;

// 修改后:初始化为0,从配置文件读取
public health: number = 0;
public maxHealth: number = 0;
public speed: number = 0;
public attackPower: number = 0;
public attackInterval: number = 0; // 从配置文件读取

配置应用逻辑优化

// 修改前:直接从根节点读取属性
this.health = this.enemyConfig.health || 30;
this.speed = this.enemyConfig.speed || 50;
this.attackPower = this.enemyConfig.attack || 10;

// 修改后:从正确的嵌套节点读取属性
// 从stats节点读取基础属性
const stats = this.enemyConfig.stats || {};
this.health = stats.health || 30;
this.maxHealth = stats.maxHealth || this.health;

// 从movement节点读取移动速度
const movement = this.enemyConfig.movement || {};
this.speed = movement.speed || 50;

// 从combat节点读取攻击力
const combat = this.enemyConfig.combat || {};
this.attackPower = combat.attackDamage || 10;
this.attackInterval = combat.attackCooldown || 2.0;

初始化逻辑修复

// 修改前:总是覆盖攻击间隔
this.attackInterval = 2.0; // 默认攻击间隔

// 修改后:只有在未设置时才使用默认值
if (this.attackInterval <= 0) {
    this.attackInterval = 2.0; // 默认攻击间隔
}

2. 修改 EnemyController.ts

默认值更新

// 修改前:不匹配配置文件结构
private defaultAttackPower: number = 10;
private defaultHealth: number = 30;

// 修改后:匹配配置文件中的实际数值
private defaultAttackPower: number = 20; // 对应combat.attackDamage
private defaultHealth: number = 10; // 对应stats.health

JSON配置文件结构

敌人配置文件 assets/resources/data/enemies.json 采用嵌套结构:

{
  "enemies": [
    {
      "id": "normal_zombie",
      "name": "普通僵尸",
      "type": "basic",
      "stats": {
        "health": 10,
        "maxHealth": 10,
        "attack": 1,
        "defense": 0,
        "speed": 50.0
      },
      "movement": {
        "speed": 50.0,
        "pattern": "direct",
        "moveType": "straight"
      },
      "combat": {
        "attackDamage": 20,
        "attackRange": 100,
        "attackCooldown": 1.0,
        "attackType": "melee"
      }
    }
  ]
}

属性映射关系

EnemyInstance属性 JSON配置路径 说明
health stats.health 当前血量
maxHealth stats.maxHealth 最大血量
speed movement.speed 移动速度
attackPower combat.attackDamage 攻击伤害
attackInterval combat.attackCooldown 攻击冷却时间

验证结果

通过测试脚本 test_enemy_config_loading.js 验证:

配置文件状态

  • 敌人总数: 11个
  • 配置版本: 2.2
  • 有效配置: 11/11

属性数值范围

  • 血量范围: 6 - 120
  • 速度范围: 20 - 60
  • 攻击范围: 20 - 120

修复效果

  1. 数据驱动: 敌人属性现在完全从JSON配置文件中读取
  2. 配置灵活: 可以通过修改JSON文件调整敌人属性,无需修改代码
  3. 结构清晰: 属性按功能分组(stats、movement、combat)
  4. 向后兼容: 保留了默认值机制,确保配置缺失时系统仍能正常运行
  5. 类型安全: 保持了TypeScript的类型检查

使用方法

添加新敌人

  1. enemies.json 中添加新的敌人配置
  2. 确保包含必要的 statsmovementcombat 节点
  3. 系统会自动加载并应用新配置

修改现有敌人

  1. 直接修改 enemies.json 中对应敌人的属性值
  2. 重启游戏即可生效

调试配置

运行测试脚本验证配置:

node test_enemy_config_loading.js

注意事项

  1. 修改配置文件后需要重启游戏才能生效
  2. 确保JSON格式正确,避免语法错误
  3. 属性值应在合理范围内,避免游戏平衡问题
  4. 新增敌人时,建议参考现有敌人的配置结构