2 Commits

Author SHA1 Message Date
walkpan
38ea7b6d57 fix(英雄): 调整英雄出生位置和移动间距参数
- 将英雄出生X坐标从-280调整为-320,避免英雄重叠
- 调整英雄/怪物前锚点X坐标,优化战斗站位
- 分离英雄和怪物的同阵营间距参数,分别设置为100和75
- 修复Boss单位间距计算逻辑,确保正确使用阵营基础间距
2026-05-01 21:36:47 +08:00
walkpan
baa66b4ece fix: 将英雄最大数量从5调整为3并统一相关逻辑
将游戏配置中的英雄最大数量(HERO_MAX_NUM)从5改为3,以调整游戏平衡性。
更新了SingletonModuleComp和MissionCardComp中相关的英雄数量上限逻辑,确保所有相关代码都使用统一的配置值而非硬编码的数字。
同时添加了两个CSV配置文件(heros.csv和skills.csv)的元数据文件。
2026-05-01 21:36:08 +08:00
7 changed files with 41 additions and 15 deletions

View File

@@ -10,6 +10,7 @@ import { GameScoreStats } from "./config/HeroAttrs";
import { mLogger } from "./Logger"; import { mLogger } from "./Logger";
import { TalentType } from "./config/TalentSet"; import { TalentType } from "./config/TalentSet";
import { gameDataSync } from "./GameDataSync"; import { gameDataSync } from "./GameDataSync";
import { FightSet } from "./config/GameSet";
/** /**
* 用远程数据覆盖本地数据(统一方法) * 用远程数据覆盖本地数据(统一方法)
@@ -79,8 +80,8 @@ export class SingletonModuleComp extends ecs.Comp {
mission_data:{ mission_data:{
mon_num:0,//怪物数量 mon_num:0,//怪物数量
hero_num:0,//英雄数量 hero_num:0,//英雄数量
hero_max_num:5,//英雄可召唤上限 hero_max_num:FightSet.HERO_MAX_NUM,//英雄可召唤上限
hero_extend_max_num:6,//英雄可拓展上限 hero_extend_max_num:FightSet.HERO_MAX_NUM + 1,//英雄可拓展上限
wave_time_num:0,//波次时间 wave_time_num:0,//波次时间
in_fight:false, in_fight:false,
fight_time:0,//战斗时间 fight_time:0,//战斗时间

View File

@@ -23,7 +23,7 @@ export enum FightSet {
CRIT_DAMAGE=50,//暴击伤害 CRIT_DAMAGE=50,//暴击伤害
MORE_RC=10,//更多次数 广告获取的次数 MORE_RC=10,//更多次数 广告获取的次数
HEARTPOS=-320,//基地位置 HEARTPOS=-320,//基地位置
HERO_MAX_NUM=5,//英雄最大数量 HERO_MAX_NUM=3,//英雄最大数量
MERGE_MAX=3, //英雄最大等级 MERGE_MAX=3, //英雄最大等级
MERGE_NEED=2, //英雄升级需要的英雄数 MERGE_NEED=2, //英雄升级需要的英雄数
// BACK_RANG=30,//后退范围 // BACK_RANG=30,//后退范围

View File

@@ -0,0 +1,11 @@
{
"ver": "1.0.1",
"importer": "text",
"imported": true,
"uuid": "54a8544b-ba40-49cd-86f8-61616975fd61",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,11 @@
{
"ver": "1.0.1",
"importer": "text",
"imported": true,
"uuid": "f1181369-d7bf-401c-8ec5-c5cbc520ff20",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@@ -49,10 +49,12 @@ interface MoveFacConfig {
export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate { export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
/** 近战判定射程(来自 heroSet */ /** 近战判定射程(来自 heroSet */
private readonly meleeAttackRange = HeroDisVal[HType.Melee]; private readonly meleeAttackRange = HeroDisVal[HType.Melee];
private readonly heroFrontAnchorX = -50; private readonly heroFrontAnchorX = -100;
private readonly monFrontAnchorX = 50; private readonly monFrontAnchorX = 0;
/** 常规同阵营横向最小间距 */ /** 常规同阵营横向最小间距(英雄) */
private readonly allySpacingX = 65; private readonly heroAllySpacingX = 100;
/** 常规同阵营横向最小间距(怪物) */
private readonly monAllySpacingX = 75;
/** 纵向判定为同排的最大 Y 差 */ /** 纵向判定为同排的最大 Y 差 */
private readonly minSpacingY = 30; private readonly minSpacingY = 30;
/** 渲染层级重排节流,避免每帧排序 */ /** 渲染层级重排节流,避免每帧排序 */
@@ -253,7 +255,8 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
const currAttrs = laneAllies[i].get(HeroAttrsComp); const currAttrs = laneAllies[i].get(HeroAttrsComp);
const isPrevBoss = prevAttrs?.is_boss; const isPrevBoss = prevAttrs?.is_boss;
const isCurrBoss = currAttrs?.is_boss; const isCurrBoss = currAttrs?.is_boss;
const spacing = (isPrevBoss || isCurrBoss) ? 100 : this.allySpacingX; const baseSpacing = model.fac === FacSet.MON ? this.monAllySpacingX : this.heroAllySpacingX;
const spacing = (isPrevBoss || isCurrBoss) ? 100 : baseSpacing;
totalSpacing += spacing; totalSpacing += spacing;
} }

View File

@@ -202,8 +202,8 @@ export class MissionCardComp extends CCComp {
if (missionData) { if (missionData) {
missionData.coin = Math.max(0, Math.floor(missionData.coin ?? 0)); missionData.coin = Math.max(0, Math.floor(missionData.coin ?? 0));
missionData.hero_num = 0; missionData.hero_num = 0;
missionData.hero_max_num = 5; missionData.hero_max_num = FightSet.HERO_MAX_NUM;
missionData.hero_extend_max_num = 6; missionData.hero_extend_max_num = FightSet.HERO_MAX_NUM + 1;
} }
this.clearHeroInfoPanels(); this.clearHeroInfoPanels();
this.layoutCardSlots(); this.layoutCardSlots();
@@ -976,8 +976,8 @@ export class MissionCardComp extends CCComp {
public setHeroMaxCount(max: number) { public setHeroMaxCount(max: number) {
const missionData = this.getMissionData(); const missionData = this.getMissionData();
if (!missionData) return; if (!missionData) return;
const min = 5; const min = FightSet.HERO_MAX_NUM;
const limit = Math.max(min, missionData.hero_extend_max_num ?? 6); const limit = Math.max(min, missionData.hero_extend_max_num ?? (FightSet.HERO_MAX_NUM + 1));
const next = Math.max(min, Math.min(limit, Math.floor(max || min))); const next = Math.max(min, Math.min(limit, Math.floor(max || min)));
if (next === missionData.hero_max_num) return; if (next === missionData.hero_max_num) return;
missionData.hero_max_num = next; missionData.hero_max_num = next;
@@ -1134,7 +1134,7 @@ export class MissionCardComp extends CCComp {
private getMissionHeroMaxNum(): number { private getMissionHeroMaxNum(): number {
const missionData = this.getMissionData(); const missionData = this.getMissionData();
return Math.max(5, Math.floor(missionData?.hero_max_num ?? 5)); return Math.max(FightSet.HERO_MAX_NUM, Math.floor(missionData?.hero_max_num ?? FightSet.HERO_MAX_NUM));
} }
private syncMissionHeroData(count?: number) { private syncMissionHeroData(count?: number) {

View File

@@ -55,9 +55,9 @@ export class MissionHeroCompComp extends CCComp {
/** 英雄出生时的掉落高度(从空中落到地面的像素差) */ /** 英雄出生时的掉落高度(从空中落到地面的像素差) */
private static readonly HERO_DROP_HEIGHT = 260 private static readonly HERO_DROP_HEIGHT = 260
/** 近战英雄起始出生 X 坐标 */ /** 近战英雄起始出生 X 坐标 */
private static readonly HERO_SPAWN_START_MELEE_X = -280 private static readonly HERO_SPAWN_START_MELEE_X = -320
/** 远程(含中程)英雄起始出生 X 坐标 */ /** 远程(含中程)英雄起始出生 X 坐标 */
private static readonly HERO_SPAWN_START_RANGED_X = -280 private static readonly HERO_SPAWN_START_RANGED_X = -320
// ======================== 运行时属性 ======================== // ======================== 运行时属性 ========================