【异星工厂】周五报道#379 - 重新布线


3楼猫 发布时间:2023-10-12 11:20:03 作者:Wube Software Language

【异星工厂】周五报道#379 - 重新布线-第0张

让我带你参观一下。这是我们的实验台,这是我们的工作凳。那边就是我们的星际空间平台!这里是我们存放各种长度的电线的地方。

这是一个真正的实时太空平台!

让我们向您展示我们使用的一些不同长度的电线。


对电线杆进行改进

这将更像是一次技术之旅,一睹我们在添加功能时的幕后花絮,涉及到必须重构以允许实现更多功能的物品之一:手动幽灵线。


技术起点

第一次使用铜线可以在 2013 年的 0.2.10 版本的异星工厂版本中看到,实际上它们一直延续到 2020 年的 1.0.0。电线杆之间的铜连接是为了表明一个电线杆指向另一个目标电线杆 “我与这根电线杆相连”。

【异星工厂】周五报道#379 - 重新布线-第1张

简单的情况 - 相邻的电线杆进行连接。

更准确地说,每个电线杆上有 5 个目标,因为静态矢量比动态矢量更理想。

【异星工厂】周五报道#379 - 重新布线-第2张

异星工厂 1.0.0 中的电线杆之间不能有铜线。


当一根电线杆被摧毁时,所有连接到其他电线杆的铜线都必须断开,因为我们不能假装“隐藏”在实体幽灵“外壳”中的实体仍然连接到网络。

【异星工厂】周五报道#379 - 重新布线-第3张

真实的电线杆不能与处于幽灵内的电线杆建立直接的“普通”连接,因为与连接相关的逻辑会变得混乱。


但为了能够在蓝图中进行电线连接(普通和电路),我们必须添加一种从幽灵到真实实体的特殊单侧连接。

【异星工厂】周五报道#379 - 重新布线-第4张

幽灵的特殊数据结构,用于跟踪其所连接的实体。在 FFF-362 (https://www.factorio.com/blog/post/fff-362) 中出现并在 1.1 中发布。

【异星工厂】周五报道#379 - 重新布线-第5张

如果两者都是幽灵,他们就会双向使用这种特殊的连接。


一开始这看起来是一个不错的解决方案,因为我们在不影响基本电线杆功能的情况下将新的可能性“粘”在了幽灵上。换句话说,电线杆逻辑不必了解幽灵及其相关逻辑。


但实际上,随着特殊情况开始堆积,这个解决方案已经开始出现问题。 

⚙ 当电线杆被摧毁时,您需要检查幽灵是否没有指向它,并更新其与包含新幽灵的连接。 

⚙ 当一根电线杆被复活时,还需要更新相应的相邻幽灵。 

⚙ 制作蓝图时,需要从真实和幽灵处收集蓝图中的电线。 

⚙ 在任何需要检查两个事物是否连接(无论虚拟连接还是真实连接)的逻辑中,我们需要检查连接可能存在的所有可能方式。这适用于拖线、自动连接、拔杆重新连接等。 

⚙ 这只是开始,因为我们只是考虑电线杆。


我们还有电源开关。开关+杆连接也是以自定义方式完成的,没有 5 个连接的限制。

【异星工厂】周五报道#379 - 重新布线-第6张

滥用电源开关,连接 6个电线杆。


因此,存储连接的位置数量以及它们可以交互的组合是一场编程噩梦,也是为什么总是存在一些特殊的极端情况,电线工作方式不同的主要原因。

类似的限制也适用于电路线。电路连接器只能存储与其他真实电路连接器的连接,因此当创建幽灵时,它只是单向连接。这意味着与电路线及其处理相关的特殊逻辑也变得臃肿。


突破点

此时,kovarex 希望能够手动将电线添加到幽灵杆上。经过一天无法准确地判断要调用哪些函数来添加幽灵线之后,我认为技术债务太多了。重构迫在眉睫!我们需要把所有东西都扔到窗外,并提出一种全新的设计,可以一次可靠地解决所有问题。


实现

很明显,最初的规则,即永远不要用任何东西指向幽灵内的“死亡”实体,并不值得复杂化。一旦我们开始发现可以通过打破这个旧规则来实现的可能的简化,就越来越明显,这就是我们要走的路。事实证明,我们一直规避改变电网杆连接逻辑,以免在正常连接系统中出现幽灵时感到困惑,换句话说,我们构建了一个完整的基础设施来保护该逻辑免受更改,而该基础设施比仅更改原始逻辑要复杂得多。

我们认为这是一个很好的编程设计,但它却让我们走上了错误的道路。


统一

而且由于所有东西都可以以相同的方式连接,真实的、幽灵般的、电源开关、电路线等。我们可以将所有相关的连接逻辑封装到一个 线连接器类中,并使一切比原来简单得多。

【异星工厂】周五报道#379 - 重新布线-第7张

随着所有的变化,这样的设置不再被认为是不可能的。


还有一些互动可以改进,哪怕只是一点点。当拖动带有电路线的电线杆时,它也会拖动那些相关的电线。

【异星工厂】周五报道#379 - 重新布线-第8张

完整视频的链接在下面: https://cdn.factorio.com/assets/blog-sync/fff-379-wire-dragging.mp4


此外,电路重新布线逻辑可以简单地以与正常电线重新布线相同的方式完成。

【异星工厂】周五报道#379 - 重新布线-第9张

完整视频的链接在下面:https://cdn.factorio.com/assets/blog-sync/fff-379-mining-rewiring.mp4


关闭

最后,经过两周的重构。我坐下来完成了最初的任务,让玩家即使在幽灵形态下也可以手动连接电线杆,只花几分钟即可。


我的电线在哪里?

说到电线,我们注意到游戏在绘制电线的方式有一些奇怪之处。一旦我看到这些问题,我就无法忽视它们。 

⚙ 长距离连接两个“短”实体(例如插入器或箱子)的电线下垂得比实际应该的要低。 

⚙ 但那些影子是怎么回事?为什么它们向南下垂,而所有其他阴影都向东延伸?这样不符合现实!

综合起来,这些问题使得电线在游戏世界中感觉格格不入,并且看起来像是粘贴在屏幕上的。那么让我们开始解决这个问题。

虽然游戏是 2D 的,但我们确实对电线连接的相对“高度”有一些提示,即连接点和阴影连接点之间的关系。使用 Lua 定义中的这两个偏移量,我们可以估计应该出现的最大线垂。

【异星工厂】周五报道#379 - 重新布线-第10张

为了更好地传达电线的位置,串在两个短实体之间的电路线现在只会下垂,直到它们接触地面。

【异星工厂】周五报道#379 - 重新布线-第11张

电线阴影现在朝太阳下垂。当与其他阴影一起观看时,它们感觉更自然且不那么不合时宜。这两项变化共同为游戏世界中的电线提供了更好、更一致的高度和空间幻觉。

【异星工厂】周五报道#379 - 重新布线-第12张

组合器之间的长距离连接应该更加清晰明了。

【异星工厂】周五报道#379 - 重新布线-第13张

一旦看到有必要改进,就很难不注意到问题。小测验:你能找出我接下来要解决的阴影问题吗?


视频游戏的图形、UI 设计、控制等方面的微小不一致可能会影响游戏体验,即使大多数玩家无法准确说明原因。大多数玩家永远不会注意到电线的变化;但他们最终都会看到电线,并不知不觉地享受到好处。时不时地花点时间改进哪怕是最小的细节也能大大有助于让一款优秀的游戏变得更棒。作为奖励,我们还可以减少一些有关该主题的错误报告。


抽象物品

异星工厂中的大多数物品都是美好而普通的,你可以将它们用作原料,用它们来建造机器和墙壁,其中一些物品甚至可以用来恢复你的健康。很简单,也很有道理。

但随着时间的推移,引入了一些新功能,这些功能具有一些独特且特定的操作,而物品是玩家发现和使用它们的唯一自然方式。一些例子: 

⚙ 蓝图和摧毁器 

⚙ 红色和绿色电线 

⚙ 放电防御遥控器 

⚙ 火炮遥控器 

⚙ Spidertron 遥控器

这些是你需要制作才能使用的真实物品,它们占用库存空间,玩家死后会丢失它们,等等。您可能会有点惊讶地发现,当第一次添加蓝图时,您必须使用先进的电路来制作它们,并且擦除它们需要花费电路。

随着时间的推移,我们逐渐决定,将所有东西都视为“真实物品”并不总是最好的游戏玩法,随着蓝图库的引入,蓝图成为第一个“抽象物品”。这意味着您可以在需要时生成一个,并且可以将它们存储在库中,这样它们就不会占用宝贵的库存空间(但您仍然可以将它们放在快捷栏上以方便访问)。


奇怪的技巧和远程交互

蓝图是很重要的,但其余的此类物品被放置在了一个奇怪的地方。最奇怪、最烦人的是红线和绿线。制作它们需要大量辛苦劳作的铜和铁,但如果你拆掉某些东西,你就什么也得不到。此外,如果您使用蓝图,则免费包含红色和绿色电线。

“远程交互”方面也开始变得奇怪。你不能从地图上对某些东西进行红线连接,但你可以获取它的蓝图,在本地连接它,然后将蓝图放回顶部,电线就会神奇地改变。这真是令人沮丧和烦人。

最后,我们采取了一条很有意义的道路,即将这些全部变成可以免费生成的抽象物品,并且抽象物品可以在任何距离工作。这也适用于铜电缆,有用于配方的“真正”铜电缆,以及用于连接电线杆的“抽象”铜电缆。新的抽象物品自然地与快捷栏系统联系在一起,该系统正在充分发挥其潜力。

您可能还会注意到,快捷方式栏现在最多可以有 12 个插槽!

【异星工厂】周五报道#379 - 重新布线-第14张

这些变化还提高了远程做事的能力,远程交互将是下一个 FFF 的重点。

【异星工厂】周五报道#379 - 重新布线-第15张

#策略游戏推荐#             #steam游戏#            #pc游戏#           #单机游戏#          #多人游戏#         #异星工厂#        #异星工厂 资讯#       #wube software#      #自动化#     #沙盒#    #开发日志#   #基地建设#  #资源管理# 


© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com