离散拍与单向推进哲学
本页遵循 Ktory 设计原则,实现边界与长期目标以该原则及其权威文档为准。
离散拍与宿主驱动
Section titled “离散拍与宿主驱动”Ktory 把一次推进定义为执行到下一处逻辑停止位置。这里的“离散”描述剧情执行协议,不表示整个游戏按离散时间运行,也不要求动画或音频在拍结束时停止。
一次推进发生什么
Section titled “一次推进发生什么”Start()、Step() 或有效 SubmitChoice() 同步推进控制流,更新 Status 以及 CurrentPayload / CurrentChoice,并分发经过节点的修饰符。它们不是返回画面快照的 API;宿主读取载荷并呈现。
纯跳转和调用可以在一次推进中连续执行,直到出现文本、无文本指令、选择或结束。普通 Step() 不能穿过需要选择的结构状态。核心的确定性依赖同一脚本、同一输入与宿主求值结果,不能把外部随机状态或副作用称为纯函数。
打字机、快显、阅读停留和外部演出条件在宿主处理。配套 PresentationController 虽随共享 C# 库提供,仍是可选的表现策略辅助,不是 Sequencer 等待动画的状态。游戏引擎可以继续播放环境声音和动作,再按自身条件决定是否发送下一次推进。
Ink 同样可由宿主逐行驱动,并提供选择与扩展接口。Ktory 的设计选择是标准化按拍数据、参数修饰符和内联多语言契约;它不以其他引擎“无法解耦”为前提。
状态与恢复边界
Section titled “状态与恢复边界”核心拥有当前执行位置、调用栈和会话内选择历史。外部状态修改不会自动回滚;向后跳转会重新执行对应内容。未来逐句恢复需要另行定义稳定身份及宿主恢复约定,当前的 PresentationId 不能代替该设计。
长期减少逐场景接线的目标仍需实际项目验证。阶段交付应由具体用例和接入反馈判断,不能只凭架构描述推导完整演出协作已经实现。
