Files
agame/docs/limboai-stable/_i18n/trans/batch03.json
T
2026-10-15 16:30:44 +08:00

145 lines
11 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"180": "事件与转换",
"181": "<l1>LimboHSM</l> 自带一套<b>事件系统</b>,有助于把<b>状态转换与状态实现解耦</b>。一个转换与特定的事件、起始状态和目标状态相关联,当该事件被派发时,转换会自动执行。",
"182": "要注册一个转换并把它与特定事件关联,可以使用 <l1>LimboHSM.add_transition</l> 方法:",
"183": "在这个示例中,我们注册了一个从 <1/> 到 <2/> 的转换,它在 <3/> 事件被派发时发生。",
"184": "转换也可以不与任何特定的起始状态关联:",
"185": "<b>事件通过</b> <l1>LimboState.dispatch</l> 方法<b>派发</b>。需要注意的是,该方法可以从状态机层级中的任何位置调用,也可以在状态机之外调用。事件会<b>从叶状态向根状态传播</b>。这意味着,如果某个事件被某个状态消费掉,它就不会再传播到其父状态。",
"186": "状态还可以定义<b>事件处理器</b>,即对特定事件做出反应的方法。这些事件处理器通常不会导致状态转换;它们只是状态对特定事件做出反应的一种机制。你可以用 <l1>LimboState.add_event_handler</l> 方法在状态中注册事件处理器:",
"187": "如果事件处理器返回 <1/>,该事件将被视为已被消费,不会再继续传播,也不会导致状态转换。",
"188": "状态的结构",
"189": "把行为树与状态机结合使用",
"190": "<l1>BTState</l> 是 <l2>LimboHSM</l> 中一种特殊的状态节点,它可以承载一个行为树。当 <l3>BTState</l> 处于活动状态时,它每帧都会执行所承载的行为树,实际上就是把该行为树当作它的实现。",
"191": "这样你就可以把行为树的强大能力与状态机的结构与控制结合起来。行为树非常适合定义复杂的层次化行为,而状态机则擅长管理不同行为之间的流转与转换。",
"192": "创建好 <l1>LimboHSM</l> 之后,就可以为给定的 <l3>LimboHSM</l> 创建一个 <l2>BTState</l>:",
"193": "单文件状态机配置",
"194": "在某些情况下,例如做原型或参加 Game Jam 时,把状态机代码放在单个文件里更实用。针对这类情况,<l1>LimboHSM</l> <b>支持委托(delegation)</b>,并提供<b>链式方法</b>以便更轻松地完成配置。下面用一个实际的代码示例来说明:",
"195": "重要类",
"196": "LimboAI 中引入了很多类。下面列出你应该了解的最重要的那些:",
"197": "BTTask",
"198": "<b>继承:</b><l1>BT</l>",
"199": "<b>被继承:</b><l1>BTAction</l>、<l2>BTComment</l>、<l3>BTComposite</l>、<l4>BTCondition</l>、<l5>BTDecorator</l>",
"200": "所有 <l1>BehaviorTree</l> 任务的基类。",
"201": "说明",
"202": "所有 <l1>BehaviorTree</l> 任务的基类。任务是 <l2>BehaviorTree</l> 中的基本积木块,代表某个具体行为或控制流。通过按层次组合和嵌套任务,可以构建出复杂的行为。",
"203": "任务可以是以下类型之一:动作、条件、组合或装饰器。每种任务类型都有对应的子类:<l1>BTAction</l>、<l2>BTCondition</l>、<l3>BTDecorator</l>、<l4>BTComposite</l>。",
"204": "任务通过 <l1>_tick</l> 方法执行工作并返回状态。状态值定义在 <l2>Status</l> 中。任务可以用 <l3>_setup</l> 方法初始化。另见 <l4>_enter</l> 与 <l5>_exit</l>。",
"205": "<b>注意:</b>不要直接继承 <b>BTTask</b> 来实现你自己的任务,而应继承上面提到的某个子类型。",
"206": "属性",
"207": "<l1>agent</l>",
"208": "<l1>Blackboard</l>",
"209": "<l1>blackboard</l>",
"210": "<l1>custom_name</l>",
"211": "<l1>elapsed_time</l>",
"212": "<l1>scene_root</l>",
"213": "<l1>Status</l>",
"214": "<l1>status</l>",
"215": "方法",
"216": "<l1>_enter</l>() <2/>",
"217": "<l1>_exit</l>() <2/>",
"218": "<l1>_generate_name</l>() <2/> <3/>",
"219": "<l1>_get_configuration_warnings</l>() <2/> <3/>",
"220": "<l1>_setup</l>() <2/>",
"221": "<l1>_tick</l>(delta: <2/>) <3/>",
"222": "<l1>abort</l>()",
"223": "<l1>add_child</l>(task: <l2>BTTask</l>)",
"224": "<l1>add_child_at_index</l>(task: <l2>BTTask</l>, idx: <3/>)",
"225": "<l1>BTTask</l>",
"226": "<l1>clone</l>() <2/>",
"227": "<l1>BehaviorTree</l>",
"228": "<l1>editor_get_behavior_tree</l>()",
"229": "<l1>execute</l>(delta: <2/>)",
"230": "<l1>get_child</l>(idx: <2/>) <3/>",
"231": "<l1>get_child_count</l>() <2/>",
"232": "<l1>get_child_count_excluding_comments</l>() <2/>",
"233": "<l1>get_index</l>() <2/>",
"234": "<l1>get_parent</l>() <2/>",
"235": "<l1>get_root</l>() <2/>",
"236": "<l1>get_task_name</l>()",
"237": "<l1>has_child</l>(task: <l2>BTTask</l>) <3/>",
"238": "<l1>initialize</l>(agent: <2/>, blackboard: <l3>Blackboard</l>, scene_root: <4/>)",
"239": "<l1>is_descendant_of</l>(task: <l2>BTTask</l>) <3/>",
"240": "<l1>is_root</l>() <2/>",
"241": "<l1>next_sibling</l>() <2/>",
"242": "<l1>print_tree</l>(initial_tabs: <2/> = 0)",
"243": "<l1>remove_child</l>(task: <l2>BTTask</l>)",
"244": "<l1>remove_child_at_index</l>(idx: <2/>)",
"245": "属性说明",
"246": "<1/> <b>agent</b> <l2>🔗</l>",
"247": "<1/> <b>set_agent</b>(value: <2/>)",
"248": "<1/> <b>get_agent</b>()",
"249": "agent 是 <l1>BehaviorTree</l> 实例的上下文对象。通常它是使用 <l3>BehaviorTree</l> 资源的 <l2>BTPlayer</l> 节点的父节点。",
"250": "<l1>Blackboard</l> <b>blackboard</b> <l2>🔗</l>",
"251": "<l1>Blackboard</l> <b>get_blackboard</b>()",
"252": "提供对 <l1>Blackboard</l> 的访问。黑板用于在同一 <l2>BehaviorTree</l> 的各任务之间共享数据。",
"253": "更多信息见 <l1>Blackboard</l>。",
"254": "<1/> <b>custom_name</b> = <2/> <l3>🔗</l>",
"255": "<1/> <b>set_custom_name</b>(value: <2/>)",
"256": "<1/> <b>get_custom_name</b>()",
"257": "用户为任务提供的名称。如果不为空,编辑器会用它来表示该任务。见 <l1>get_task_name</l>。",
"258": "<1/> <b>elapsed_time</b> <l2>🔗</l>",
"259": "<1/> <b>get_elapsed_time</b>()",
"260": "自任务被“进入”以来所经过的时间。见 <l1>_enter</l>。",
"261": "当任务不处于 <2/> 状态时返回 <1/>。",
"262": "<1/> <b>scene_root</b> <l2>🔗</l>",
"263": "<1/> <b>get_scene_root</b>()",
"264": "行为树所在场景的根节点(例如 <l1>BTPlayer</l> 节点的拥有者)。可用于获取 <2/> 引用。",
"265": "<b>示例:</b>",
"266": "<l1>Status</l> <b>status</b> <l2>🔗</l>",
"267": "<l1>Status</l> <b>get_status</b>()",
"268": "<l2>_tick</l> 返回的最后一次执行 <l1>Status</l>。",
"269": "方法说明",
"270": "<1/> <b>_enter</b>() <2/> <l3>🔗</l>",
"271": "当任务被“进入”时调用,即任务在不具有 <1/> <l2>status</l> 的情况下被执行时。",
"272": "在执行顺序上,它先于 <l1>_tick</l> 被调用。当主要工作开始前需要做准备时使用此方法,通常是在任务需要不止一个 tick 才能完成时。另见 <l2>execute</l>。",
"273": "<1/> <b>_exit</b>() <2/> <l3>🔗</l>",
"274": "当任务被“退出”时调用,即在 <l1>_tick</l> 返回 <2/> 或 <3/> 状态之后。另见 <l4>execute</l>。",
"275": "<1/> <b>_generate_name</b>() <2/> <3/> <l4>🔗</l>",
"276": "在未设置 <l1>custom_name</l> 时,调用它来为任务生成显示名称。见 <l2>get_task_name</l>。",
"277": "<1/> <b>_get_configuration_warnings</b>() <2/> <3/> <l4>🔗</l>",
"278": "此方法返回的字符串会作为警告消息显示在行为树编辑器中。任何重写了此方法的任务脚本都必须在文件顶部包含 <1/> 注解。",
"279": "<1/> <b>_setup</b>() <2/> <l3>🔗</l>",
"280": "在初始化阶段调用,用于初始化任务。它只会在任务第一次执行 tick 之前被调用一次。借助这个方法,你可以在任务开始执行之前为它设置所需的状态或配置。",
"281": "<l1>Status</l> <b>_tick</b>(delta: <2/>) <3/> <l4>🔗</l>",
"282": "当任务被“tick”时调用,也就是在更新过程中由 <l1>BTPlayer</l> 或 <l2>BTState</l> 执行它时。",
"283": "返回定义在 <l1>Status</l> 中的执行状态。",
"284": "<b>注意:</b>任务通过实现这个方法来执行其主要功能。",
"285": "<1/> <b>abort</b>() <l2>🔗</l>",
"286": "递归地重置该任务及其子任务。如果任务处于 <1/> 状态,它会被退出,并且其状态被重置为 <2/>。",
"287": "<1/> <b>add_child</b>(task: <l2>BTTask</l>) <l3>🔗</l>",
"288": "添加一个子任务。<1/> 会被放到子任务列表的末尾。",
"289": "<1/> <b>add_child_at_index</b>(task: <l2>BTTask</l>, idx: <3/>) <l4>🔗</l>",
"290": "添加一个子任务。<1/> 会被放到子任务列表中的 <2/> 位置。",
"291": "<l1>BTTask</l> <b>clone</b>() <2/> <l3>🔗</l>",
"292": "复制该任务及其子任务,并复制导出的成员。出于效率考虑,子资源是共享的,但 <l1>BBParam</l> 的子类型例外,它们总是会被复制。编辑器用它来实例化 <l2>BehaviorTree</l>,以及复制粘贴任务。",
"293": "<l1>BehaviorTree</l> <b>editor_get_behavior_tree</b>() <l2>🔗</l>",
"294": "返回拥有此任务的行为树。仅在编辑器中可用。",
"295": "<l1>Status</l> <b>execute</b>(delta: <2/>) <l3>🔗</l>",
"296": "执行该任务。执行遵循特定的顺序:",
"297": "如果任务当前的 <l1>status</l> 不是 <2/>,会先调用 <l3>_enter</l> 方法。",
"298": "接着调用 <l1>_tick</l> 方法来执行任务的工作。",
"299": "如果 <l1>_tick</l> 方法返回 <2/> 或 <3/> 状态,接下来会调用 <l4>_exit</l> 方法,作为执行清理的一部分。",
"300": "<l1>BTTask</l> <b>get_child</b>(idx: <2/>) <3/> <l4>🔗</l>",
"301": "通过指定索引返回一个子任务。",
"302": "<1/> <b>get_child_count</b>() <2/> <l3>🔗</l>",
"303": "返回子任务的数量。",
"304": "<1/> <b>get_child_count_excluding_comments</b>() <2/> <l3>🔗</l>",
"305": "返回子任务的数量,不把 <l1>BTComment</l> 任务计算在内。",
"306": "<1/> <b>get_index</b>() <2/> <l3>🔗</l>",
"307": "返回该任务在行为树分支中的位置。如果该任务不属于任务树(也就是没有父任务),则返回 <1/>。",
"308": "<l1>BTTask</l> <b>get_parent</b>() <2/> <l3>🔗</l>",
"309": "返回该任务的父任务。",
"310": "<l1>BTTask</l> <b>get_root</b>() <2/> <l3>🔗</l>",
"311": "返回行为树的根任务。",
"312": "<1/> <b>get_task_name</b>() <l2>🔗</l>",
"313": "此方法返回的字符串用于在编辑器中表示该任务。",
"314": "除非设置了 <l2>custom_name</l>,否则会调用 <l1>_generate_name</l> 方法为任务生成显示名称。",
"315": "<1/> <b>has_child</b>(task: <l2>BTTask</l>) <3/> <l4>🔗</l>",
"316": "如果 <2/> 是此任务的子任务,则返回 <1/>。",
"317": "<1/> <b>initialize</b>(agent: <2/>, blackboard: <l3>Blackboard</l>, scene_root: <4/>) <l5>🔗</l>",
"318": "初始化该任务。为它赋值 <l1>agent</l> 和 <l2>blackboard</l>,并对该任务及其子任务调用 <l3>_setup</l>。",
"319": "该方法会对每个子任务递归调用。<1/> 应当是行为树所在场景的根节点(例如包含该行为树的节点的拥有者)。",
"320": "<1/> <b>is_descendant_of</b>(task: <l2>BTTask</l>) <3/> <l4>🔗</l>",
"321": "如果此任务是 <2/> 的后代,则返回 <1/>。换句话说,此任务必须是 <3/> 的子任务,或者是它的子任务、孙任务之一。"
}