状态效果设计与实现
本文最后更新于17 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

中毒状态:类型、持续时间、叠加方式、伤害数值

各种状态的叠加使得策略更加丰富生动

类型:1.增益效果 2.减益效果 3.中性效果——本身没有好坏,但是可以与其它技能产生互动。比如“印记”,施加多少层印记可以进行一次引爆产生大量伤害

持续时间:1.回合数 2.无限的 持续时间可以用来平衡不同buff的强弱设计

叠加机制:不可叠加 刷新持续时间 增加持续时间 增加层数(状态效果与层数挂钩

效果的载荷——skillEffectData

比如:冰霜护盾 1.初始效果造成小范围的伤害 2.持续效果:在状态有效期间持续生效或者周期生效比如每回合回复n点护甲值

一言概之,一个技能的状态效果就是由多个技能效果组合而成

1. 脚本运行机制分析

1.1 apply_status_processor.gd 运行机制

加载时机

  • 作为效果处理器,在战斗系统初始化时被加载
  • 可能通过 EffectProcessor 基类的注册机制被战斗管理器识别和管理

初始化流程

  • 继承自 EffectProcessor 基类
  • 通过 get_processor_id() 方法注册处理器 ID 为 “status”
  • 无需额外初始化逻辑,依赖基类初始化

主要执行路径

  1. 战斗管理器调用 can_process_effect() 判断是否可处理特定效果
  2. 若可处理,调用 process_effect() 执行状态效果应用逻辑
  3. 执行状态应用几率判定
  4. 调用目标角色的 apply_skill_status() 方法
  5. 处理状态应用结果,触发初始效果和视觉效果

与其他系统模块交互

  • 与 BattleManager 交互:触发初始效果、请求视觉效果
  • 与 Character 交互:调用 apply_skill_status() 方法
  • 与 SkillEffectData 交互:读取效果配置数据
  • 与 SkillStatusData 交互:处理状态模板和实例

1.2 skill_status_data.gd 运行机制

加载时机

  • 作为资源文件,在需要时被加载(如技能配置引用时)
  • 运行时通过 duplicate(true) 创建实例

初始化流程

  • 继承自 Resource 基类
  • 通过 _init() 方法初始化运行时变量:
  • source_char = null
  • target_char = null
  • left_duration = duration (使用默认持续时间)
  • stacks = 1 (默认叠加层数)

主要执行路径

  1. 作为模板被技能配置引用
  2. 运行时通过 duplicate(true) 创建实例
  3. 实例被 Character 类管理,处理持续时间、叠加等逻辑
  4. 触发初始效果、持续效果和结束效果

与其他系统模块交互

  • 与 Character 交互:被角色管理和应用
  • 与 SkillEffectData 交互:包含初始/持续/结束效果
  • 与 BattleManager 交互:通过效果触发与战斗系统交互

2. 功能作用解析

2.1 apply_status_processor.gd 功能定位

核心功能

  • 专门处理状态效果类型的技能效果
  • 负责状态效果的应用流程管理
  • 处理状态应用的几率判定
  • 触发状态的初始效果和视觉反馈

业务逻辑

  • 验证状态模板有效性
  • 执行几率判定
  • 调用角色方法应用状态
  • 处理应用结果并反馈
  • 触发相关效果和视觉表现

2.2 skill_status_data.gd 功能定位

核心功能

  • 定义状态效果的数据结构和行为
  • 作为状态效果的模板配置和运行时实例
  • 管理状态的属性修改、效果触发和交互规则

业务逻辑

  • 存储状态的基本信息(ID、名称、描述、图标)
  • 定义状态的行为规则(持续时间、叠加行为、类型)
  • 管理状态的效果(初始、持续、结束)
  • 处理状态间的交互(覆盖、抵抗)
  • 定义行动限制规则

3. 逻辑流程分析

3.1 apply_status_processor.gd 逻辑流程

  1. can_process_effect()
  • 检查效果类型是否为 STATUS 类型
  • 返回布尔值表示是否可处理
  1. process_effect()
  • 初始化结果字典
  • 验证状态模板有效性
  • 记录尝试应用的状态 ID
  • 等待一帧(可能为了同步)
  • 获取状态应用几率并执行判定
  • 若几率判定失败,返回失败结果
  • 调用目标角色的 apply_skill_status() 方法
  • 根据应用结果更新结果字典
  • 若应用成功:
    • 更新成功原因
    • 触发状态的初始效果
    • 播放成功视觉效果
    • 输出成功消息
  • 若应用失败:
    • 播放失败视觉效果
    • 输出失败消息
  • 返回结果字典
  1. _check_if_can_apply_status_by_chance()
  • 生成随机数与几率比较
  • 返回布尔值表示是否通过几率判定

3.2 skill_status_data.gd 逻辑流程

  1. _init()
  • 初始化运行时变量
  • 设置默认值
  1. get_full_description()
  • 构建状态的完整描述文本
  • 包含名称、描述、持续时间、叠加信息和效果信息
  1. is_countered_by()
  • 检查是否被其他状态抵抗
  1. overrides_other_status()
  • 检查是否覆盖其他状态

4. 数据交互分析

4.1 数据传递方式

apply_status_processor.gd → skill_status_data.gd

  • 通过 effect_data.status_to_apply 获取状态模板
  • 调用 target.apply_skill_status(status_template_to_apply, source, effect_data) 传递状态模板

skill_status_data.gd → apply_status_processor.gd

  • 通过 application_result 返回状态实例
  • 通过 get_initial_effects() 提供初始效果数据

4.2 依赖关系

  • apply_status_processor.gd 依赖 skill_status_data.gd 提供状态模板和实例
  • skill_status_data.gdapply_status_processor.gd 引用和处理

4.3 数据格式规范

状态应用结果格式

{
    "applied_successfully": bool,       # 是否成功应用
    "reason": String,                   # 应用结果原因
    "status_instance": SkillStatusData  # 状态实例(如果成功)
}

处理结果格式

{
    "success": bool,            # 处理是否成功
    "applied_status_id": StringName,  # 尝试应用的状态ID
    "reason": String,           # 处理结果原因
    "error": String (可选)       # 错误信息(如果有)
}

5. 关键功能点说明

5.1 apply_status_processor.gd 关键功能

  1. 状态应用几率判定
  • 功能:根据配置的几率值判断状态是否成功应用
  • 实现:_check_if_can_apply_status_by_chance(chance) 方法
  • 参数:chance (float) – 状态应用几率(0-1之间)
  • 返回值:bool – 是否通过几率判定
  1. 状态应用流程管理
  • 功能:协调整个状态应用过程
  • 实现:process_effect() 方法
  • 参数:
    • effect_data (SkillEffectData) – 效果数据
    • source (Character) – 施加者
    • target (Character) – 目标
  • 返回值:Dictionary – 应用结果
  1. 初始效果触发
  • 功能:状态应用成功后触发其初始效果
  • 实现:调用 BattleManager 的 _apply_skill_effects_to_targets 方法
  • 触发条件:状态应用成功且初始效果不为空
  1. 视觉效果请求
  • 功能:根据应用结果请求相应的视觉效果
  • 实现:_request_visual_effect() 方法
  • 应用场景:状态应用成功/失败时

5.2 skill_status_data.gd 关键功能

  1. 状态模板配置
  • 功能:定义状态的基本属性和行为
  • 实现:通过 @export 变量定义可配置属性
  • 关键属性:status_id, status_name, duration, max_stacks, stack_behavior
  1. 状态效果管理
  • 功能:管理状态的各种效果
  • 实现:通过数组变量存储不同类型的效果
  • 效果类型:initial_effects, ongoing_effects, end_effects
  1. 状态交互规则
  • 功能:定义状态间的交互逻辑
  • 实现:overrides_states 和 resisted_by_states 数组
  • 方法:is_countered_by(), overrides_other_status()
  1. 行动限制
  • 功能:限制角色在拥有此状态时的行动
  • 实现:restricted_action_categories 数组
  • 应用场景:眩晕、沉默等状态
  1. 运行时状态管理
  • 功能:管理状态的运行时数据
  • 实现:source_char, target_char, left_duration, stacks 变量
  • 初始化:_init() 方法

6. 异常处理机制

6.1 apply_status_processor.gd 异常处理

  1. 无效状态模板处理
  • 检测:检查 status_template_to_apply 是否有效
  • 处理:设置错误信息,输出错误日志,返回失败结果
  • 代码位置:lines 14-17
  1. 几率判定失败处理
  • 检测:_check_if_can_apply_status_by_chance() 返回 false
  • 处理:设置失败原因,输出抵抗消息,返回失败结果
  • 代码位置:lines 27-32
  1. 视觉效果请求失败处理
  • 检测:BattleManager 不存在或缺少方法
  • 处理:输出警告日志
  • 代码位置:lines 53-54

6.2 skill_status_data.gd 异常处理

  • 该脚本作为资源类,主要依赖外部系统进行错误处理
  • 未实现显式的异常处理机制,依赖 Godot 的资源管理系统

7. 代码优化建议

7.1 apply_status_processor.gd 优化建议

  1. 错误处理增强
  • 建议添加对 targetsource 有效性的检查
  • 建议增加对 effect_data 中必要字段的验证
  1. 性能优化
  • 考虑移除 line 21-22 的 await Engine.get_main_loop().process_frame,除非有明确的同步需求
  • 建议使用信号机制替代直接调用 BattleManager 的私有方法 _apply_skill_effects_to_targets
  1. 代码可读性
  • 建议添加更多注释说明关键逻辑
  • 考虑将几率判定逻辑与应用逻辑分离为更小的函数

7.2 skill_status_data.gd 优化建议

  1. 数据验证
  • 建议添加对导出变量的验证逻辑,确保数据有效性
  • 考虑在 _init() 中添加参数验证
  1. 功能扩展
  • 建议添加状态效果的强度计算方法,支持基于叠加层数的效果变化
  • 考虑添加状态的序列化/反序列化方法,支持存档系统
  1. 性能优化
  • 对于频繁访问的属性,考虑使用 getter/setter 方法
  • 建议使用枚举值而非字符串进行状态类型判断

8. 总结

这两个脚本共同构成了游戏状态效果系统的核心组件:

  • skill_status_data.gd 定义了状态效果的数据结构和行为规则
  • apply_status_processor.gd 负责状态效果的应用流程管理

系统设计清晰,功能完整,能够处理状态效果的应用、叠加、持续和结束等完整生命周期。通过几率判定、视觉反馈和效果触发等机制,为游戏提供了丰富的状态效果表现能力。

建议开发团队在后续开发中,进一步完善异常处理机制,优化性能,并考虑添加更多高级功能,如状态效果的动态强度调整、复杂的状态交互规则等,以提升游戏的策略性和可玩性。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇