这套系统将对大量事件作出反应,但是输出的渠道是有限的,所以我们不妨先考虑打印环节。《斧头人》的日志有两种显示方式:显示在屏幕右下角的若干条最新日志,以及按 `m` 键后在左侧屏幕显示的完整日志。
由于只有按键才能查看完整日志,所以需要设法保存日志文本,而不是直接输出到屏幕上。因此我们给日志系统添加第三个组件:
打印文本不是本文重点。它涉及到日志系统和 UI 对象之间的交互,具体实现方法取决于每个游戏的实际情况。接下来,我们看看如何保存和读取字符串。
我们把文本保存在 `private List<string> fullLog` 里面,然后设计一个接口 `ILogManager`:
假如我们希望 `GetLog(0)` 返回最新日志,`GetLog(1)` 返回倒数第二条日志,可以这样实现 `GetLog()`:
我们使用 `LogData.GetStringData()` 获取数据,同时更新一下 `ILogManager`。请注意 `LogMessage` 是一个自定义对象,它包含两个和 `logData.xml` 有关的数据标签。
现在讨论日志系统第五个、也是最后一个模块。输出的文本有时候包含特定数据,比如怪物名字或者伤害值。换句话说,日志系统需要处理获取的文本:
实际解决方案视游戏而定,这里提供一个解决思路。《斧头人》使用类似 `%ACTOR%` 的字符串作为占位符,比如“%ACTOR% 命中了你。”上文提到的自定义对象 `LogMessage` 还有一个构造器,接受三个参数。在 `LogData.GetStringData()` 内部,我们调用 `TryReplacePlaceholder()` 修改文本。
评论区
共 4 条评论热门最新