十月份没有太大进展。月初通关了泰坦佛和大表哥,月末开始玩辐射三:天外世界(我的第三个人物,Jack Cooper,离开翡翠谷仅仅用了十七个小时)。这次谈两个话题,时间系统和读取 XML 文件系统,翻译自以下两篇文章:
如果把时间系统看作一个数据容器,它应当具备四个功能:
实现 `ISchedule.GotoNext()` 和 `ISchedule.Remove()` 的时候,避免引用空对象。
`StartTurn()` 和 `EndTurn()` 将发布多个事件通知其它游戏组件:某个游戏对象的回合开始或结束了,`NextActor()` 封装了多个公开方法:
`TurnManager` 还订阅了事件 `CheckingSchedule`,隐式地调用 `NextActor()`。
游戏开始的时候,我们手动调用一次 `TurnManager.StartTurn()`。接下来,只要每个游戏对象在合适时机发布 `CheckingSchedule` 事件,时间系统就能自动运转起来了。
读取 `XElement` 的组件比较有趣。理想情况下,我们可以设计这样一个接口:
但是实际游戏中有两个问题。第一,数据标签的类型不止一个。第二,XML 文件的结构同样不止一种。
为此,我们针对每种 XML 文件设计专门的接口。这些接口拥有类似的名字,比如 `ISettingData` 和 `IActorData`。它们的公用方法名字相同,比如 `GetIntData()` 和 `GetStringData()`,但是输入的参数不同。
从外部看,我们调用 `SettingData.GetBoolData()` 或者 `ActorData.GetStringData()`的时候,只要输入特定的数据标签,就能得到需要的数据,不用考虑数据来自哪一份文件。
评论区
共 5 条评论热门最新