回合制战斗的核心是状态流转,一个清晰的状态机比一堆 if-else 可靠得多。
战斗场景拆成 6 个状态:
enum BattleState {
INTRO, # 入场演出
PLAYER_TURN, # 玩家回合
ENEMY_TURN, # 敌人回合
RESOLVE, # 结算伤害
CHECK_END, # 检查胜负
VICTORY, # 胜利演出
DEFEAT, # 失败演出
}
class BattleFSM:
var current: BattleState = BattleState.INTRO
func transition(next: BattleState) -> void:
_exit_state(current)
current = next
_enter_state(current)
单一出口:每回合只能通过 CHECK_END 结束
事件驱动:动画播放完成才发信号推进状态,不靠定时器猜
状态机不怕状态多,怕的是状态之间互相偷渡。
接入角色技能系统和 buff 结算。