藏川线前段

--- 摄于 2017 年 9 月 藏川线前段

拖了很久的火车调度系统终于到了要发布的时期了,这些天抽空将游戏进程推进到了最尾声,主要做了以下几件事情,用来集中测试自己的火车调度系统,不出意外的是,又发现了一些问题,同时将火车的运行效率又提高了 1/3,达到了目前的理想状态:

那么正片开始,分成三个部分来讲

调度系统的核心观念

从最抽象的方面来说,调度系统由物资供需系统 + 火车停放冲能系统两个子系统结合而成。

物资供需系统

这部分主要由需求火车站和供给火车站结合而成:供给站提供原料,需求站将原料组合加工成下一阶段的原料,再输出到新的供给站。

从单一的供给站和需求站上来看:

这是简单的一对一车站,但游戏中是一个多对多的模型。在一对一中,供给站可以在接到需求的时候,立刻发出供给信号,但多对多的时候,如果多个供给站同时发出供给信号,在火车足够的情况下,会立刻发出多辆火车,但需求站只需要一车物资,导致火车因找不到需求站而停摆在供给站,造成资源浪费。

要避免火车停摆的问题,需要在供给站中引入优先级系统,同一种物资的多个供给站,分别为不同的优先级,并且多个优先级之间发出供给信号的时间有交错,我的系统上是每级供给站相差 10 tick,这样刚好满足需求,也不会因为优先级的问题导致找不到资源,并且我的系统上,优先级是手动设定的,可以随时进行调整,因为到游戏后期,由于火车资源不足,可能会导致材料需求和供给上也需要一定的优先级调整。

火车停放冲能系统

火车的活动轨迹相比于上面的供给站需求站组合是更清晰简单的,分为四个部分:

但就这点东西也是有考量点的,火车任务都是由目前版本新出的中断任务机制进行调度的:

在车库如果没有发车信号的话,车会从自动驾驶模式转为手动,这会导致不人为操作一下,车就永远停在车库不动了,这也是早期在摸索如何构建调度系统的时候碰到的一个大坑。

这段时间优化 1/3 效率的地方就在:需求站卸货完成之后,火车的驶向问题上。早期因为火车充足,卸货完成之后,所有火车一律回到车库接任务再出发,而经过一大堆整改之后,变成火车总线物资调度了,火车突然严重不足,再让火车回到车库接任务完全是浪费时间,直接卸货后接任务非常符合我的预期,资源最大化利用,没有空跑的火车。

因为车厢对固体和液体有不同的装载过程,导致需要分为固体组和液体组两种火车,同时不太清楚是 bug 还是 feature,加油任务如果不放在卸货之后,可能会导致它不触发,这个问题也是被后期 debug 出来的,突然有车发信号说无能源,但调度任务中有加油任务并且设置没有问题,只是摆在了不一样的顺序上。

信号灯整改

早期信号灯在交叉口放得比较粗放,因为运行火车不多,问题不大,在后期,有接近 200 个火车站,22 辆火车,并且由于火车数量不够,导致火车一直在运行,然后发现了信号灯的一些小瑕疵。对路口进行了精修,目前再也不存在十字路口因为左右朝向车通过导致上下朝向车流等待的问题了。这种问题非常细致,需要在地图上盯着火车运行才能发现,这也是拖了如此久才填坑的原因:不进行大规模的测试,问题很难被发现。而火车数量不足的问题也是我特意留下我的,只有让火车长期保持运行,才能发现更多的问题,如果不是火车不足,也不会促使我进一步压榨火车的资源利用率问题。

需求站信号

主要分为三个模块:

供给站信号

主要分为三个模块:

全局信号

由雷达进行汇总,只使用了雷达红信号。知道的朋友都了解,异星工厂中,雷达可以将信号在同一个图层中进行广播,这也是这套火车调度系统的核心前提 ——一个全局订单薄。如果代码中体现,这里应该是要有个全局锁之类的东西进行处理的,可惜的是,游戏中无法体现全局锁的概念。

音视频

以上是我做的火车调度系统的简易版文字说明,如果想要更详细的解说,可以查看视频说明,祝大家玩得愉快。

音视频的坑点

这次录制视频碰到的坑非常多,导致我用了数倍的功夫,才完成了一个堪称及格的产品,及格的概念是,视频把事情讲清楚了。

录制过程

录制没什么好说的,我用 obs 在 Linux 下录制了一个 H.264 的 3840x2160 60Hz 的 mp4 视频文件出来,时长 48 分钟,是双音轨。由于我的电脑没有配置麦克风,录制的时候使用手机作为麦克风进行同步录音。但录制完成之后才发现,手机路由不知道是误操作还是什么导致没有录上声音,一分钟声音都没有。正在我准备对照视频重新录音的时候,突然发现,我的 kdenlive 打开视频文件之后,预览页面是黑屏的,黑屏意味着:无法剪辑视频。开始以为是编码问题,折腾一通之后发现不是。这东西还很搞笑,我录制了个 10s 的视频,用 kdenlive 打开然后导出,导出的视频是正常的,再次用 kdenlive 重新打开导出视频,也无法预览,这表明其他功能没问题,问题在于预览这块的工具或者库出了问题,尝试解决这个问题,发现少装了 mediainfo 这个库,重新安装上之后,还是一样的预览黑屏,这我就真没辙了,然后下载了 shortcut,也是一样的预览黑屏,折腾了一两个小时在查询资料上,没找到有效的解决方案,正打算宣布制作视频失败的时候,突然想到,要不然用手机剪辑试试。

剪辑过程

手机上因为是打算发到 bilibili,直接下载了必剪,打开后发现能正常编辑,没多想,先开始录音。等我在视频中逐帧录音快完成的时候,发现了令人震惊的问题:这个录音的音轨貌似有问题,它没法移动!锁死在了视频对应的秒数上,如果我剪掉部分无法配音的视频,录音就会错位,音轨无法移动,而这时候,录音已经完成了 90% 了。正着急的时候,想到方案,先把录音完成,然后将它导出,再次导入,重新剪辑,这时候音轨可以正常编辑了。导出的时候也很奇怪,要导出 4k 视频,会变成 16G+ 大小,而源视频是 2.2g,并且视频也是 3840x2160 的 4k 视频,小破站的工具到底是什么毛病?令人百思不得其解。

总之,这个工具只能轻度编辑视频,但它的语音转文字效果不错,至少是及格线以上的水平,完成度很高。经过两次视频导出之后,最后留下了 1920*1080 的视频,发上 bilibili 了,也算是完成了吧,虽然坑一堆。

最后

祝大家新年快乐,玩得愉快。

评论区

加载更多

登录后评论