fix(hero): 修复英雄大招动画播放异常问题

1. 重构大招播放方法,支持传入自定义动画clip名,适配不同职业的大招动画
2. 修复技能匹配逻辑,通过前缀匹配处理max0/max1类型的大招技能
3. 更新技能配置表,将辅助职业的技能act改为max1适配新逻辑
This commit is contained in:
panFD
2026-09-14 21:38:52 +08:00
parent 7640957325
commit 8c8810bb7e
4 changed files with 26 additions and 15 deletions

View File

@@ -358,7 +358,7 @@ export const SkillSet: Record<number, SkillConfig> = {
},
// 法师/辅助群体攻击大招
6200: {
uuid: 6200, name: "火球术", sp_name: "maxm1", icon: "31-Fire", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max0",
uuid: 6200, name: "火球术", sp_name: "maxm1", icon: "31-Fire", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1",
DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
RType: RType.bezier, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05, info: "一个大火球",
},
@@ -385,12 +385,12 @@ export const SkillSet: Record<number, SkillConfig> = {
//============================= ====== 辅助技能 回合技能 ====== ==========================
6301: {
uuid: 6301, name: "护盾", sp_name: "buff_wind", icon: "28-Electric-Wave", TGroup: TGroup.Self, readyAnm: "up_blue", endAnm: "", act: "atk",
uuid: 6301, name: "护盾", sp_name: "buff_wind", icon: "28-Electric-Wave", TGroup: TGroup.Self, readyAnm: "up_blue", endAnm: "", act: "max1",
DTType: DTType.single, kind: SkillKind.Shield, ap: 30, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support, shield_duration: 7,
RType: RType.fixed, EType: EType.animationEnd, info: "获得施法者最大生命30%的护盾, 持续7秒",
},
6302: {
uuid: 6302, name: "治疗", sp_name: "buff_wind", icon: "g_priest_zldy_skill", TGroup: TGroup.Team, readyAnm: "up_green", endAnm: "", act: "atk",
uuid: 6302, name: "治疗", sp_name: "buff_wind", icon: "g_priest_zldy_skill", TGroup: TGroup.Team, readyAnm: "up_green", endAnm: "", act: "max1",
DTType: DTType.single, kind: SkillKind.Heal, ap: 300, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
RType: RType.fixed, EType: EType.animationEnd, info: "治疗伙伴/自己",
},

View File

@@ -80,9 +80,15 @@ export default class HeroAnmComp extends Component {
if (this.maxPlaying) return
this.anmcon.play(`atk0`)
}
max() {
/**
* 播放大招动画。
* Why 带 name:技能表 act 直接配置 clip 名(战士技 "max0"、法系技 "max1"),
* 固定播 max0 会导致法系大招动画永远播不出。
* @param name 大招 clip 名("max0"/"max1"),maxPlaying guard 已同时覆盖两者
*/
max(name: string = "max0") {
if (this.maxPlaying) return
this.anmcon.play("max0")
this.anmcon.play(name)
}
play(anm: string = "") {
if (anm === "") return

View File

@@ -48,14 +48,16 @@ export class HeroSpine extends Component {
atk() {
this.anm.atk()
}
max(){
this.anm.max()
max(name: string = "max0"){
this.anm.max(name)
}
play(name:string){
// 技能表 act 配置的是 clip 名(max0/max1),不能用全等匹配 "max"
if(name.startsWith("max")){
this.max(name)
return
}
switch(name){
case "max":
this.max()
break
case "atk":
this.atk()
break
@@ -65,7 +67,7 @@ export class HeroSpine extends Component {
case "move":
this.move()
break
}
}
}
do_atked(){
this.anm.atked()

View File

@@ -487,11 +487,14 @@ export class HeroViewComp extends CCComp {
playSkillAnm(act: string = "") {
mLogger.log(this.debugMode, 'HeroViewComp', '[heroview] act' + act,)
if (act === "") return;
// 技能表大招 act 配置为 clip 名("max0"/"max1"),必须前缀匹配,
// 全等匹配 "max" 会落空导致大招动画不播、isCastingMax 不置位
if (act.startsWith("max")) {
this.isCastingMax = true;
this.as.max(act)
return
}
switch (act) {
case "max":
this.isCastingMax = true;
this.as.max()
break
case "atk":
this.as.atk()
break