Transport belts/Physics/zh: Difference between revisions
m (Remove unused links) |
No edit summary |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
{{Languages}} | {{Languages}} | ||
异星工厂中的[[belt transport system/zh|传送带运输系统]]可以称作是游戏中最为精细的模拟系统。箱子及其他容器中的物品只是一个总数,传送带上的物品曾一度[https://www.factorio.com/blog/post/fff-176 优化为整体]进行移动,但现在传送带上的每个物品都是一个独立的对象,包括他们被机械臂抓起或放下时。这将导致一些错综复杂的行为,尤其当涉及到[[Inserters/zh#Inserter_Throughput/zh|机械臂运输量]]的时候。 | |||
在异星工厂中所有屏幕上的物品都在内存中是一个真实的对象并且遵循着游戏引擎的规则。作为一个模拟游戏,这不是典型的常见的。一个贴切的例子就是在旧版本的模拟城市中,并没有模拟每一个城市中的住户。 | 在异星工厂中所有屏幕上的物品都在内存中是一个真实的对象并且遵循着游戏引擎的规则。作为一个模拟游戏,这不是典型的常见的。一个贴切的例子就是在旧版本的模拟城市中,并没有模拟每一个城市中的住户。 | ||
这是受限于CPU的性能。实时物理模拟最多同时有100,000个对象,对于一个模拟游戏来说是少见的。异星工厂游戏引擎创建了一个精确的、可复用的模拟异星工厂世界,它是如此的精确,可以被用于计算一些惊人惊异的传送带的特性。 | 这是受限于CPU的性能。实时物理模拟最多同时有100,000个对象,对于一个模拟游戏来说是少见的。异星工厂游戏引擎创建了一个精确的、可复用的模拟异星工厂世界,它是如此的精确,可以被用于计算一些惊人惊异的传送带的特性。 | ||
== | == 传送带属性 == | ||
* '''密度''':密度指单位长度传送带上可以放置多少物品,计量单位是单侧每[[Map_structure#Tile|格]]物品数。直线传送带的密度是4,这与传送带种类及物品种类无关。传送带密度与把物品扔到地上(使用Z键)的密度有可能不一致。 | |||
* ''' | |||
* '''速度''' | * '''速度''':物品在传送带上的速度计量单位通常是'''格/[[game-second|秒]]''',但需要注意的是,实际计算单位是'''[[Types/Position|位置]](1/256格)/刻(1/60秒)'''。更多内容详见下文。[[transport belt/zh|基础传送带]]的速度是1.875格/秒,[[Fast transport belt/zh|高速传送带]]的速度是基础传送带的2倍,[[express transport belt/zh|极速传送带]]的速度是基础传送带的3倍。 | ||
* ''' | |||
* ''' | * '''吞吐量''':吞吐量指每秒有多少物品从一格运送至下一格,计算方法是密度(物品/格)乘以速度(格/秒)。例如,基础传送带单侧吞吐量是 4 * 1.875 = 7.5物品/秒,双侧吞吐量翻倍,即15物品/秒。 | ||
* '''压缩''': 传送带上物品之间如果完全没有空间,则被称为''完全压缩'',否则只是部分被压缩,且无法达到最优吞吐量。将物品放到传送带上的设备——[[inserters/zh|机械臂]], [[splitters/zh|分流器]],从侧面引入的另一条传送带,采矿机等等——会将传送带上物品间的小空隙[https://forums.factorio.com/viewtopic.php?f=3&t=57993 扩大为足够物品放入的空间]。这意味着传送带在饱和时会自行达到完全压缩状态。 | |||
* '''侧''': 传送带有左右两侧,无论传送带如何弯曲,每一侧的密度和速度均为固定值不受影响。转角传送带的两侧速度一样,但内侧比外侧更短,所以内侧物品将比外侧物品先离开转角。 | |||
== | == 传送带速度 == | ||
通过上面的数据,我们可以计算出三种传送带的速度和吞吐量。游戏中的实际情况与下列数据一致。 | |||
{| class="wikitable" | {| class="wikitable" | ||
! rowspan=2 | 传送带类型 || colspan=2 | 速度 || colspan=4 | 吞吐量 | |||
! | |||
| | |||
| | |||
|- | |- | ||
| | ! 传送带类型 || 格/秒 || 单侧, 物品/秒 || 单侧, 物品/分钟 || 双侧, 物品/秒 ||双侧, 物品/分钟 | ||
|align="center" | |- align="center" | ||
|align=" | | align="left" | {{Imagelink|Transport belt|Transport belt/zh}} || 1 || 1.875 || 7.5 || 450 || 15 || 900 | ||
| | |- align="center" | ||
|align="center" | | align="left" | {{Imagelink|Fast transport belt|Fast transport belt/zh}} || 2 || 3.75 || 15 || 900 || 30 || 1800 | ||
|align=" | |- align="center" | ||
|align="center" | | align="left" | {{Imagelink|Express transport belt|Express transport belt/zh}} || 3 || 5.625 || 22.5 || 1350 || 45 || 2700 | ||
|align=" | |||
|} | |} | ||
== 传送带上的物品 == | |||
正如之前所说,物品在传送带上以压缩的状态和一定的密度占据各自空间。事实上,传送带上的每个物品在每个时刻精确地位于某一[[Map_structure#Tile|格]]传送带上。 | |||
举例来说,尽管看上去一个物品可能一半在一格传送带而另一半在下一格传送带上,它实际上精确地位于其中一格传送带上: | |||
* 如果这个物品所在的那格传送带停止,物品将停止传送;否则物品将继续传送——除此之外没有其他状态。 | |||
* 如果用这两个格传送带组成电路网络并对他们传送的物品进行[[Belt_transport_system#Circuit_network|识别]],就能发现这个物品仅被识别了一次。 | |||
* 机械臂只能抓取逻辑层面位于其面前传送带格上的物品,无法抓取相邻传送带格的物品。 | |||
从这个意义上来说,我们可以把传送带上的物品看做相互之间有最小距离的一个个点,这比将其看做一个个相邻且具有一定面积的物品有时更有用。对于涉及传送带的计算和包含传送带的电路系统来说,我们并不关心这些“中心点”在图上的位置,虽然看上去它们是在中心位置: | |||
[[Image:Belts-with-one-tick-offsets.png|center]] | |||
上面这幅图中,相邻传送带之间有1刻的延迟。在同一时刻停止上面一排传送带格的传输,导致最下端的物品延伸出了不同长度。最左边传送带的物品几乎向下一个传送带格延伸出一半长度,这意味着物品的中心点最接近停止的传送带格的边缘。 | |||
下面的原理图展示了物品在两个直线[[fast transport belt|高速传送带]]上移动时每一刻输出信号情况。物品的中心点标识为<code>*</code>。(传送格1与传送格2之间的空格只是为了看得更清楚——游戏中两格传送带间并没有空隙。) | |||
<pre> | |||
刻 传送格 1 传送格 2 传送格1输出信号 传送格2输出信号 | |||
|------------------------------| |------------------------------| 脉冲 保持 脉冲 持续 | |||
0 <---*--> <---*--> <---*-- ><---*--> <---*--> 0 3 0 2 | |||
1 <---*--> <---*--> <---* --><---*--> <---*--> 0 3 0 2 | |||
2 <---*--> <---*--> <-- -*--><---*--> <---*-- 0 2 1 3 | |||
3 <---*--> <---*--> < ---*--><---*--> <---* 0 2 0 3 | |||
4 -> <---*--> <---*--> <---*--><---*--> <-- 0 2 0 2 | |||
5 *--> <---*--> <---*- -> <---*--><---*--> < 1 3 0 2 | |||
6 --*--> <---*--> <--- *--> <---*--><---*--> 0 2 1 3 | |||
7 <---*--> <---*--> <- --*--> <---*--><---*--> 0 2 0 3 | |||
8 <---*--> <---*--> <---*--> <---*--><---*--> 0 2 0 3 | |||
</pre> | |||
== 传送带位置和长度 == | |||
[https://forums.factorio.com/viewtopic.php?f=5&t=70055 传送带精确测量]显示转角传送带的外侧比直线传送带长1.15234375倍(295/256)。 这意味着每格直线传送带有256个''[[Types/Position|位置]]''供物品放置,尽管物品所在的精确位置只能通过间接手段来测量。 | |||
以下是不同种类传送带以位置度量的速度或长度: | |||
{| class="wikitable" | {| class="wikitable" | ||
| | ! colspan=2 | 情形 || 位置数 | ||
|- | |- | ||
| colspan=2 | [[transport belt/zh|基础传送带]]速度,每刻 || align="center" | 8 | |||
|- | |- | ||
| | | colspan=2 | [[Fast transport belt/zh|高速传送带]]速度,每刻 || align="center" | 16 | ||
| | |||
|align="center" | | |||
|- | |- | ||
| | | colspan=2 | [[Express transport belt/zh|极速传送带]]速度,每刻 || align="center" | 24 | ||
| | |||
|align="center" | | |||
|- | |- | ||
| | | colspan=2 | 传送带上一个物品的长度(任意速度下) || align="center" | 64 | ||
|align="center" | | |||
|- | |- | ||
| colspan=2 | 一格直线传送带、地下传送带、分流器单侧长度 || align="center" | 256 | |||
|- | |- | ||
| | | colspan=2 | 转角传送带内侧长度 || align="center" | 106 | ||
|align="center" | | |||
|- | |- | ||
| | | colspan=2 | 转角传送带外侧长度 || align="center" | 295 | ||
|align="center" | | |||
|- | |- | ||
| | | style="border-right: 0px" | 一条直线传送带远侧汇入另一条传送带或地下传送带出口的长度 | ||
| style="border-left: 0px" | [[Image:Sideload-late.gif]] || align="center" | 68 | |||
| | |||
|- | |||
|- | |- | ||
| | | style="border-right: 0px" | 一条直线传送带近侧汇入另一条传送带或地下传送带入口的长度 | ||
| style="border-left: 0px" | [[Image:Sideload-early.gif]] || align="center" | 188 | |||
| | |||
|- | |||
| | |||
|align="center" | | |||
|} | |} | ||
举例说明,利用这些数据,我们可以推断出基础传送带的速度: | |||
: 8 (位置/刻) / 256 (位置/格) * 60 (刻/秒) = 1.875 格/秒 | |||
相应的单侧吞吐量为: | |||
: 8 (位置/刻) / 64 (位置/物品) * 60 (刻/秒) = 7.5 物品/秒 | |||
== 参见 == | == 参见 == | ||
* [[ | * [[Belt transport system/zh|传送带运输系统]] | ||
** [[Transport belts/zh|传送带]] | ** [[Transport belts/zh|传送带]] | ||
* [http://www.conveyorbeltguide.com/ 真实传送带的一些常用信息] | * [http://www.conveyorbeltguide.com/ 真实传送带的一些常用信息] | ||
* Jan 04 FFF #276: [https://www.factorio.com/blog/post/fff-276 Belt item spacing & Script rendering] | |||
* Feb 03 FFF #176: [https://www.factorio.com/blog/post/fff-176 Belts optimization for 0.15] | |||
* [https://forums.factorio.com/viewtopic.php?f=5&t=70055 Accurate belt segment measurements] (discusses 0.17) | |||
{{C|Belt transport system}} | {{C|Belt transport system}} |
Latest revision as of 05:48, 23 August 2019
异星工厂中的传送带运输系统可以称作是游戏中最为精细的模拟系统。箱子及其他容器中的物品只是一个总数,传送带上的物品曾一度优化为整体进行移动,但现在传送带上的每个物品都是一个独立的对象,包括他们被机械臂抓起或放下时。这将导致一些错综复杂的行为,尤其当涉及到机械臂运输量的时候。
在异星工厂中所有屏幕上的物品都在内存中是一个真实的对象并且遵循着游戏引擎的规则。作为一个模拟游戏,这不是典型的常见的。一个贴切的例子就是在旧版本的模拟城市中,并没有模拟每一个城市中的住户。
这是受限于CPU的性能。实时物理模拟最多同时有100,000个对象,对于一个模拟游戏来说是少见的。异星工厂游戏引擎创建了一个精确的、可复用的模拟异星工厂世界,它是如此的精确,可以被用于计算一些惊人惊异的传送带的特性。
传送带属性
- 密度:密度指单位长度传送带上可以放置多少物品,计量单位是单侧每格物品数。直线传送带的密度是4,这与传送带种类及物品种类无关。传送带密度与把物品扔到地上(使用Z键)的密度有可能不一致。
- 速度:物品在传送带上的速度计量单位通常是格/秒,但需要注意的是,实际计算单位是位置(1/256格)/刻(1/60秒)。更多内容详见下文。基础传送带的速度是1.875格/秒,高速传送带的速度是基础传送带的2倍,极速传送带的速度是基础传送带的3倍。
- 吞吐量:吞吐量指每秒有多少物品从一格运送至下一格,计算方法是密度(物品/格)乘以速度(格/秒)。例如,基础传送带单侧吞吐量是 4 * 1.875 = 7.5物品/秒,双侧吞吐量翻倍,即15物品/秒。
- 压缩: 传送带上物品之间如果完全没有空间,则被称为完全压缩,否则只是部分被压缩,且无法达到最优吞吐量。将物品放到传送带上的设备——机械臂, 分流器,从侧面引入的另一条传送带,采矿机等等——会将传送带上物品间的小空隙扩大为足够物品放入的空间。这意味着传送带在饱和时会自行达到完全压缩状态。
- 侧: 传送带有左右两侧,无论传送带如何弯曲,每一侧的密度和速度均为固定值不受影响。转角传送带的两侧速度一样,但内侧比外侧更短,所以内侧物品将比外侧物品先离开转角。
传送带速度
通过上面的数据,我们可以计算出三种传送带的速度和吞吐量。游戏中的实际情况与下列数据一致。
传送带类型 | 速度 | 吞吐量 | ||||
---|---|---|---|---|---|---|
传送带类型 | 格/秒 | 单侧, 物品/秒 | 单侧, 物品/分钟 | 双侧, 物品/秒 | 双侧, 物品/分钟 | |
基础传送带 | 1 | 1.875 | 7.5 | 450 | 15 | 900 |
高速传送带 | 2 | 3.75 | 15 | 900 | 30 | 1800 |
极速传送带 | 3 | 5.625 | 22.5 | 1350 | 45 | 2700 |
传送带上的物品
正如之前所说,物品在传送带上以压缩的状态和一定的密度占据各自空间。事实上,传送带上的每个物品在每个时刻精确地位于某一格传送带上。
举例来说,尽管看上去一个物品可能一半在一格传送带而另一半在下一格传送带上,它实际上精确地位于其中一格传送带上:
- 如果这个物品所在的那格传送带停止,物品将停止传送;否则物品将继续传送——除此之外没有其他状态。
- 如果用这两个格传送带组成电路网络并对他们传送的物品进行识别,就能发现这个物品仅被识别了一次。
- 机械臂只能抓取逻辑层面位于其面前传送带格上的物品,无法抓取相邻传送带格的物品。
从这个意义上来说,我们可以把传送带上的物品看做相互之间有最小距离的一个个点,这比将其看做一个个相邻且具有一定面积的物品有时更有用。对于涉及传送带的计算和包含传送带的电路系统来说,我们并不关心这些“中心点”在图上的位置,虽然看上去它们是在中心位置:
上面这幅图中,相邻传送带之间有1刻的延迟。在同一时刻停止上面一排传送带格的传输,导致最下端的物品延伸出了不同长度。最左边传送带的物品几乎向下一个传送带格延伸出一半长度,这意味着物品的中心点最接近停止的传送带格的边缘。
下面的原理图展示了物品在两个直线高速传送带上移动时每一刻输出信号情况。物品的中心点标识为*
。(传送格1与传送格2之间的空格只是为了看得更清楚——游戏中两格传送带间并没有空隙。)
刻 传送格 1 传送格 2 传送格1输出信号 传送格2输出信号 |------------------------------| |------------------------------| 脉冲 保持 脉冲 持续 0 <---*--> <---*--> <---*-- ><---*--> <---*--> 0 3 0 2 1 <---*--> <---*--> <---* --><---*--> <---*--> 0 3 0 2 2 <---*--> <---*--> <-- -*--><---*--> <---*-- 0 2 1 3 3 <---*--> <---*--> < ---*--><---*--> <---* 0 2 0 3 4 -> <---*--> <---*--> <---*--><---*--> <-- 0 2 0 2 5 *--> <---*--> <---*- -> <---*--><---*--> < 1 3 0 2 6 --*--> <---*--> <--- *--> <---*--><---*--> 0 2 1 3 7 <---*--> <---*--> <- --*--> <---*--><---*--> 0 2 0 3 8 <---*--> <---*--> <---*--> <---*--><---*--> 0 2 0 3
传送带位置和长度
传送带精确测量显示转角传送带的外侧比直线传送带长1.15234375倍(295/256)。 这意味着每格直线传送带有256个位置供物品放置,尽管物品所在的精确位置只能通过间接手段来测量。
以下是不同种类传送带以位置度量的速度或长度:
情形 | 位置数 | |
---|---|---|
基础传送带速度,每刻 | 8 | |
高速传送带速度,每刻 | 16 | |
极速传送带速度,每刻 | 24 | |
传送带上一个物品的长度(任意速度下) | 64 | |
一格直线传送带、地下传送带、分流器单侧长度 | 256 | |
转角传送带内侧长度 | 106 | |
转角传送带外侧长度 | 295 | |
一条直线传送带远侧汇入另一条传送带或地下传送带出口的长度 | ![]() |
68 |
一条直线传送带近侧汇入另一条传送带或地下传送带入口的长度 | ![]() |
188 |
举例说明,利用这些数据,我们可以推断出基础传送带的速度:
- 8 (位置/刻) / 256 (位置/格) * 60 (刻/秒) = 1.875 格/秒
相应的单侧吞吐量为:
- 8 (位置/刻) / 64 (位置/物品) * 60 (刻/秒) = 7.5 物品/秒
参见
- 传送带运输系统
- 真实传送带的一些常用信息
- Jan 04 FFF #276: Belt item spacing & Script rendering
- Feb 03 FFF #176: Belts optimization for 0.15
- Accurate belt segment measurements (discusses 0.17)