本文主要是介绍红石电路(我的世界),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
红石电路(Redstone circuits)为玩家建造的,可以用于控制或激活其他机械的结构。
电路本身既可以被设计为用于响应玩家的手动激活,也可以让其自动工作——或是反复输出信号,或是响应非玩家引发的变化,例如生物移动、物品掉落、植物生长、昼夜更替等等。Minecraft中能够被红石控制的机械类别几乎覆盖了你能够想象到的极限,小到最简单的机械(如自动门与光开关),大到占地巨大的电梯、自动农场、小游戏平台,甚至游戏内建造的计算机。了解如何构建和使用红石电路及其可控制的机制能极大地增加Minecraft中可游玩的深度。
红石电路的主题非常广泛,本条目只是红石电路的一个概述。点击各章节的主条目可以查看详细信息。
基本概念[编辑 | 编辑源代码]
在描述基本的红石电路之前,需要先了解一些基本概念。
红石元件[编辑 | 编辑源代码]
主条目:红石元件列表
红石元件是红石电路的基础,通过有目的性地使用红石元件即可构建出简单或复杂的红石电路。
红石元件大致分为三个大类。
电源(信号源)
- 电源为整个电路或部分电路提供信号来源,在电路分析中通常被认为是只进行输出的元件
- 因为这类元件的输入来源并非红石电路,而是外部干预。例如玩家按下按钮;实体触发压力板(即便触发由于红石电路主动干预);随着时间和遮挡变化的世界光照强度等。
- 有按钮、拉杆、红石块、压力板、阳光探测器等。
传输元件(传输者、电容器)
- 传输元件负责直接传输和处理信号本身,自身可以接受输入输出。
- 有红石粉、红石中继器、红石比较器、红石火把等。
- 在基岩版中,除红石粉外的传输者被称为电容器(源码如此),电容器源码上归属于特殊的一类“信号源”元件。
机械元件(消费者)
- 机械元件负责接受信号并作出反应,干预世界(例如移动方块、发光、发射投掷物等)
- 有时被称为消费者,因其只接收信号。
- 有活塞、红石灯、发射器、铜灯、投掷器、活板门等。
位置[编辑 | 编辑源代码]
毗邻方块
以曼哈顿距离度量的“两格以内”范围
一个方块占据一个正方体的空间,正方体有6个面。也就是说与一个方块的六个面直接接触的方块有6个,称之为“与该方块毗邻的方块”,简称毗邻。
一个方块的毗邻和毗邻的毗邻(即与这个方块的曼哈顿距离为两格以内的方块),通称为这个方块的二阶毗邻。一个方块的毗邻的毗邻共有19个方块(包括它本身),二阶毗邻共有25个方块(包括它本身)。
四周一般指的是与该方块东西南北四个面相接触的4个方块。
红石线、红石火把等方块需要附着在其他方块上,一旦所附着的方块被破坏,它本身也会掉落。它们所附着的方块简称为它们的附着。
一些电源和传输元件有它的指向。中继器、比较器的指向就是输出端所朝向的方块,红石火把的指向是正上方的那一个方块,红石粉的指向通常与它的纹理的朝向相同,但也有特殊情况。
电路与机械[编辑 | 编辑源代码]
两个术语通常都用于指包含红石元件的结构,但两者具有一定区别:
- 电路(circuit)为处理信号的结构(产生,传输,计算)。
- 机械(mechanism)会干预世界(与方块和实体交互)。
不会干预世界的电路被称为“静态电路”,通常不包含机械。
- 因为其工作完全“静态”,不会对世界产生任何影响。
相反地,会干预世界的电路被称为“动态电路”,可以由任意元件构成。
- 因为其工作会对世界产生影响。
- 在Java版中,使用半连接性(QC)的电路归属于动态电路,因为只有部分机械元件具有半连接性。
所有动态电路一定具有机械,因此也可称为机械电路。但静态电路可能具有机械(例如单纯用于显示计算结果的红石灯)。参见下文基本种类章节。
信号与脉冲[编辑 | 编辑源代码]
信号,正负逻辑
红石电路能够产生信号
通常,“有/无信号”时称为“1/0”、“True/False”或“高电平/低电平”。这种逻辑被称为“正逻辑”。
也存在“负逻辑”,其对应关系相反,即:
- 将有信号视为0;将无信号视为1。
负逻辑是一种特殊的设计手法,通常是为了优化电路指标(譬如降低体积、延迟、卡顿)而有意为之。
边沿
上边沿/上升沿指红石信号由无到有的变化瞬间;下边沿/下降沿指红石信号由有到无的变化瞬间。
相位
相(Phase)代表相位,指逻辑代数中的“相同”与“相反”(例如“1”与“0”互为反相)。
脉冲
当信号出现一个较为短暂的“0-1-0”过程,该过程通常被称为脉冲(或正脉冲。“1-0-1”的过程被称为负脉冲)。脉冲持续的时间长度被称为脉冲的长度。另见下文§ 脉冲电路。
严格意义上,脉冲的信号强度和长度并不受限制,也不存在脉冲持续时间超过一定值就不称作脉冲的说法。比如在实际的红石系统中,一个长度超过30秒的脉冲仍可称作脉冲。同时也常用长脉冲/短脉冲的说法区分不同长度脉冲。
信号强度[编辑 | 编辑源代码]
信号强度通常为0到15的整数。红石线能向相邻的红石线传导信号,但每传导1格,信号强度会降低1点。因此,连续红石线最远能将信号传递15格。为了传输更远,可以使用红石中继器将信号强度强化为15,或使用红石比较器保持信号强度不变。
信号强度会因红石线间的直接传导而衰减,但也可以通过测重压力板、阳光探测器或直接控制输出不同的信号强度。
红石比较器实际上可以接受和输出小于0或大于15强度的信号。如命令方块的成功次数超过15或容器内的物品超过堆叠限制,红石比较器会把它们作为强度小于0或大于15的信号进行比较或作差后输出。
在Java版中,由于红石粉会规制信号强度(小于0的信号会直接被无视,大于15的信号会变成15),因此强度小于0或大于15的信号不能输出到红石粉上,只能直接使用红石比较器链接成链传输。
在基岩版中,由于信号传递基于有向图,红石粉不规制信号且只用于构建图中的边。因此强度小于0或大于15的信号可以输出到红石粉上,且衰减也会被正确计算,但最远只能传递15格。
充能[编辑 | 编辑源代码]
主条目:充能与激活
部分方块能够被充能及解除充能。当红石信号作用于一个方块时,若该方块毗邻的所有机械元件都可以被激活,那么这个方块就被称为红石导体,该行为被称为充能。被充能的方块叫做充能方块。大多数红石导体都是不透明的方块。
强充能与弱充能[编辑 | 编辑源代码]
充能分强充能和弱充能:
- 当红石导体被红石元件(如中继器、比较器、红石火把等)充能。那么它能够激活毗邻的红石线和其他元件,这样的充能即为强充能(Strongly Charging);
- 当红石导体被红石粉充能。那么它只能够激活毗邻的其他元件,不能激活其他红石粉,这样的充能即为弱充能(Weakly Charging)。
被强充能的方块所表现性质和红石块大体相同,但红石块不是红石导体,且可以改变红石线的形状和指向、向红石比较器边侧输入信号[仅Java版],而强充能方块不能。
充能方块无法再去充能其他方块,只有电源和传输元件才可以去充能一个方块。
充能等级[编辑 | 编辑源代码]
使用多少信号强度的信号去充能一个方块,我们就说这个方块有多少充能等级。被强充能的方块有多少充能等级,就可以激活毗邻的红石粉至多少信号强度。充能等级的大小与充能的强与弱完全无关。
激活[编辑 | 编辑源代码]
主条目:充能与激活
红石灯的激活
机械元件和红石元器件可被电源、充能方块和传输元件以特定的方式激活,引发机械元件和红石元器件的反应(如活塞推动方块,开门,红石火把熄灭等)。
有些机械元件只会在刚被激活的瞬间有所反应,直到取消激活并再激活之前都不会再有所反应(如脉冲型命令方块执行命令,投掷器与发射器投掷或发射物品,音符盒播放一个音符)。其他机械元件会在激活时始终保持状态,直到取消激活(红石灯保持点亮,门保持开启,漏斗保持锁定状态,活塞保持伸出等)。
所有机械元件都可以被下列方块激活(例外:活塞不会被其活塞头朝向的方块常规激活):
- 毗邻的,处于开启状态的电源
- 例外:红石火把不会激活其附着的机械元件,侦测器不会激活除其指向以外的方块。
- 毗邻的充能方块(强充能与弱充能均可)
- 指向该机械元件的、输出信号的红石比较器或红石中继器
- 指向该机械元件的、激活的红石粉,包括附着其上的红石粉。(毗邻的、但未指向机械元件的红石粉不会激活机械元件)
半连接方式激活——在Java版中活塞也可以被能够激活活塞之上空间的东西激活。请注意,最左侧的活塞并未被半连接激活,因为红石粉没有直接指向活塞上方的方块,因此无法激活该活塞
部分机械元件可以用其他方式激活(QC激活):
- 在Java版中,发射器、投掷器与活塞可以被以下方式激活:即如果上述4种方式作用于该机械元件正上方的那个方块(无论是何种方块,即使是空气也无妨),该机械元件也会被激活。正如门的下半部分那样。这种情况也可以表述为:该元件可以被斜上方或上方2格的方块激活。右图即为这类激活方式的例子。 这种方式被称为半连接。
- 门占2格空间,激活任意一半门,另一半也会被激活。
充能与激活[编辑 | 编辑源代码]
主条目:充能与激活
充能与激活——上方的红石灯既被“激活”(因此红石灯点亮),也被“充能”(因此毗邻中继器被激活),但下方红石灯只是被“激活”,并未被“充能”
对于属于红石导体的机械元件(包括命令方块、投掷器、发射器、音符盒与红石灯等等),既可以被充能也可以被激活。因此区分它们是被激活还是被充能相当重要:
- 如果它能够激活毗邻的红石元器件和机械元件,那么它就被充能了。
- 如果它本身作出了一定的反应,那么它就被激活了。
机械元件只要被充能就一定也会被激活,但被激活并不会一定会被充能(如被毗邻的充能方块激活)。
不是红石导体的机械元件(门、栅栏门、活塞、漏斗、铁轨、活板门等等)可被激活并作出反应,但因为不具备红石导体的性质而无法被充能。
方块更新(狭义)[编辑 | 编辑源代码]
主条目:方块更新 § NC更新
当一个方块发生状态的改变时,该改变会引起周围方块的方块更新。
在Java版中,红石电路的运作依赖于方块更新机制。单次方块更新会使得周围的其他红石元件接收到“附近发生变化”的提示,以检测自身是否应该发生变化。若发生了变化,将又会对周围发出方块更新。更新引起变化、变化创造更新,这将会是个连锁反应,电路不一定能达到完全稳定的状态。
在Java版中,充能并非游戏内部的机制,因此,不管是否被充能或解除充能都不能产生方块更新。元件发生变化时,会更新周围足够范围内的方块以使电路正常工作(例如,压力板更新其毗邻及其附着的毗邻)。
除了方块更新之外,红石比较器还可以通过其后方两格内的容器(包括上有运输矿车的探测铁轨)和某些其他方块的变化(例如物品栏里的物品发生变动)进行更新;侦测器还可以检测某些方块变化而进行更新。
以下为Java版中的通常情况下的方块更新范围:
下列红石元件会产生二阶毗邻范围的方块更新:
- 红石粉
- 红石火把
拉杆的毗邻以及它的附着的毗邻(包括它的附着)
下列红石元件产生的方块更新范围是其毗邻和附着(或指向)的毗邻:
- 按钮
- 探测铁轨(仅限水平铁轨,还会使得比较器更新)
- 动力铁轨(仅限水平铁轨)
- 激活铁轨 (仅限水平铁轨)
- 拉杆
- 压力板
- 陷阱箱 (毗邻和其下方方块的毗邻。还会使得比较器更新)
- 绊线钩(破坏或改变状态)
- 测重压力板
- 讲台(毗邻和其下方方块的毗邻。还会使得比较器更新)
- 避雷针
- 幽匿感测体(毗邻和其下方方块的毗邻)
指向以及指向的毗邻
以下的红石元件的更新范围是指向及指向的毗邻(除该元件本身位置):
- 侦测器
- 红石比较器
- 红石中继器
下列红石元件产生的方块更新范围是其毗邻、其上方方块的毗邻以及下方方块的毗邻:
- 倾斜的 铁轨、激活铁轨、探测铁轨与动力铁轨。
- 红石粉(在不会激活的位置放置时)
下列红石元件产生的方块更新的范围只有它的毗邻:
- 铁轨(仅限水平铁轨)
- 阳光探测器
- 反向阳光探测器
- 绊线(同时会使有效联结的绊线钩开启)
- 活塞与黏性活塞(包括活塞头与移动中的活塞)
- 音符盒
- 钟
- 绊线钩(放置)
- 标靶
下列方块的状态更改时不会引发方块更新:
- 命令方块(但会使比较器更新)
- 循环型命令方块(但会使比较器更新)
- 连锁型命令方块(但会使比较器更新)
- 发射器(但会使比较器更新)
- 投掷器(但会使比较器更新)
- 门
- 栅栏门
- 漏斗(但会使比较器更新)
- 红石灯
- 活板门
红石系统[编辑 | 编辑源代码]
本段落所述内容仅适用于基岩版。
简要介绍
基岩版使用有向图的数据结构存储与管理红石电路,称为红石系统。红石系统的图采用邻接表存储,所以部分文字也会使用“邻接表”描述。红石电路的运作主要依赖于红石系统,同时也受方块更新的影响。
红石系统会储存所有红石元件,记录元件间连接方式及衰减,缓存周围部分实体方块的信息。每2游戏刻,红石系统就进行一次信号更新,计算和设置各个红石元件的红石信号。动力铁轨与激活铁轨的衰减计算也基于图。
部分细节[编辑 | 编辑源代码]
红石元件在源码中被分为4类:信号源、电容器、消费者和传输者。
信号源
信号源为只能输出信号的元件。有按钮、拉杆、压力板、绊线钩、探测铁轨、红石块、阳光探测器、唱片机、讲台、标靶、避雷针、(校频)幽匿感测体。
电容器(是一类特殊的信号源)
电容器为既能输入信号,又能输出信号的元件。有中继器、比较器、红石火把、侦测器(源码如此)。
传输者
传输者只负责传输(构建图,用有向边连接各个元件),只有红石粉。在图构建完成后可被忽略(不影响信号正常计算)。
消费者
消费者为只能输入信号的元件。有红石灯、铜灯、发射器、投掷器、合成器、(黏性)活塞、漏斗、铁轨(道岔处)、动力铁轨、激活铁轨、钟、音符盒、门、活板门、栅栏门、命令方块、TNT、生物头颅、大型垂滴叶。
消费者具有一个属性“晋升为信号源”,用于允许被强充能的消费者被强充能时的信号计算。
拓展[编辑 | 编辑源代码]
保存、加载与卸载
红石系统的有向图数据不存入存档数据(为了节省存档占用空间),每次进入存档后加载区块时重新搜索。因此只加入玩家加载过的区块中的元件。所以即便在某个区块放置了大量元件,只要未加载其所在区块,这些元件就不会进入图,也就不会拖慢游戏速度。
同样,若某个区块已经被加载过,其中的元件及链接就已被加入图。即便该区块被卸载,元件数据与链接也不会被删除,仍能正确进行信号计算,包括所有机械元件(只是无法响应信号并工作)。因此静态电路可以抗卸载工作。
图欠缺稳定性
有的电路会被微时序扰动所影响,例如:特殊状态的火把高频可被图的重搜影响;对脸侦测器高频会被区块影响工作状态。
图搜索算法缺陷
即便很反直觉,但有的元件的确无法改变红石粉指向(如标靶、活塞、钟)。它们只能将自身和连接到自身的元件组成的有向边额外加入图(如输入直连标靶的中继器、比较器、火把),而不能干预图的搜索走向。这是由于线路连接优先级高于充能连接导致的(优先处理线路连接,处理完线路连接再处理充能连接。且如果线路连接和充能连接指向同一元件,直接选择线路连接的结果,而无视充能连接的结果(即便充能连接的衰减较低)。
性能对比
由于电路连接不改变时红石粉相当于“不存在”,元件输出通过链接数据和衰减“直达”输入。节省了大量串行计算。
- 因此在静态电路中,基岩版红石粉的性能开销相较Java版红石粉具有压倒性的优势。
但由于基岩版有向图搜索算法的缺陷,在电路连接产生改变时会产生相对较大的性能开销,若图更新过多,就可能造成卡顿、运行缓慢等情况,但也可以通过专门的设计来尽可能减小图的重搜的性能开销。
- 因此在动态电路中,基岩版红石粉的性能开销相较Java版红石粉相等甚至更大。
红石刻[编辑 | 编辑源代码]
主条目:刻
红石刻(Redstone tick)简称刻或rt,也就是2游戏刻(如果没有卡顿等于0.1秒)。
在Java版中,因为多数红石元件需要2的整数倍游戏刻改变状态,所以红石刻曾被定义为Minecraft更新红石元件状态的最小时间单位,曾被玩家在红石电路中广泛使用。随着对游戏机制的进一步了解,现在常把游戏刻(game tick简称“gt”)作为最小时间单位。
在基岩版中,红石元件的信号通常每隔1游戏刻计算一次。因此红石刻既可以作为时间单位使用,等于2游戏刻;也可以用“红石刻”和“非红石刻”两个名词来指代某一游戏刻,以区分该游戏刻是否更新红石信号。
电路体积[编辑 | 编辑源代码]
通常使用长×宽×高的格式(电路的外切长方体)描述电路体积,其中包括底层用于附着的方块,不包括输入信号或输出信号的方块或结构。单位为方块(Block),简称b。
描述电路体积的另一种方法是忽略最下层支撑电路的那层方块(例如位于最下层红石粉之下的方块)。然而这种方法无法区分平面电路与一格高的电路。
电路特征[编辑 | 编辑源代码]
根据不同的设计目标,应当考虑一些常见的特征:
1格高电路
1格高电路只有1格,也就是说这种电路不能使用需要附着的元件(如红石线、红石中继器)。
1格宽电路
1格宽电路指至少1个横向尺寸为1的电路。亦称单片电路。
平面电路
指可以直接建造在地平面,无需层叠元件(不计红石元件的附着)的电路。平面电路通常利于初学者理解与学习。
无痕电路
指可以完全隐藏在一堵墙,或地板之下,或天花板之上的电路(即无痕迹电路)。特点是开启/关闭时不外露电路元件,这类设计常用于活塞门。
无延迟电路
指一接到输入信号,即时改变输出的零延迟电路(事实上仍然有延迟,只是小于1gt)。
无声电路
指不会发出声音的电路。这种电路不会有活塞、发射器、投掷器等会发出响声的元件。此类电路适合陷阱、安静环境以及需要减噪的电路的建造。
可堆叠电路
指同样的电路可以一个直接叠在另一个的旁边或上方的电路,叠放之后各个单元可以被一个总输入控制。
可并列电路
指同样的电路可以一个直接叠在另一个的旁边或上方的电路,叠放之后各个电路之间不会互相干扰。
其他可能的设计目标
包括降低子电路延迟、减少昂贵元件消耗(如侦测器)、尽量减小体积等。
基本种类[编辑 | 编辑源代码]
根据电路的原理、功能以及实现目标,中文区玩家将其分为三大类和其他种类。
数字电路[编辑 | 编辑源代码]
数字电路,简称数电,即通过游戏所给的红石元件与逻辑机制(或、非)来实现逻辑运算。数字电路一般基于二进制运算法则和逻辑运算来实现各种运算,从而实现各种复杂的计算器和计算机。数字电路在现实中是一门学科。如果没有知识基础与思维基础,数字电路对普通玩家来说较为复杂高深。
数电分为三派:传统数电、现代数电和无延迟数电。
传统数电
- 传统数电只使用静态电路来完成整个电路的逻辑,只在电路输出处使用动态电路。
- 例如一个使用活塞屏显示结果的四则运算器,按照定义,它只能在活塞屏处使用动态电路。
现代数电
- 现代数电仍然要求电路主要逻辑使用静态电路,但允许合理地运用动态电路(例如使用墙电或光电)来提升电路性能。
- 例如:使用光电的占地仅16区块、访问时间1~4秒的10Hz双通道读写16384字节RAM。在储存阵列密度高达2方块/位数据的前提下具有如此速度和带宽,该电路性能传统数电无法企及。
无延迟数电
- 由于无论在传统数电或现代数电中,完全的无延迟均被排斥,因此无延迟数电独立成派。无延迟数电通常追求无延迟前提下特殊的实现:更小的体积或是更低的卡顿;亦或是验证一些极其复杂的数学逻辑在Minecraft中的可行性(若不采用无延迟电路意味着时间开销过高)。
- 例如:无延迟四则计算器、无延迟边沿逻辑计算体系、10Hz中央处理器等。
数电相较于模电,速度较快,体积稍大。
模拟电路[编辑 | 编辑源代码]
模拟电路,简称模电,即利用比较器的比较或减法模式来对信号强度进行处理与运算。
“模拟”意为“连续变化”。但Minecraft的红石信号实际在强度和时间上都是离散的(例如不存在11.45强度的信号,也不存在长度无法度量的信号),这类信号以及相关的处理电路逻辑在现实中称为多电平逻辑(归属于数字电路)。此处使用“模拟”一词是为了区分信号有无和信号强度的传输与计算。在现实生活中,数字电子技术(一般是二电平逻辑,仅有高或低电平)与模拟电子技术(重在连续变化的电势)间的区别与其最为相似,因此“模拟”与“数字”的叫法被广泛采用,但请记住其和现实中有所区别,切勿混为一谈。
红石模拟电路主要分为弱信号模拟电路(弱模)和强信号模拟电路(强模)。弱模基于0~15信号强度进行处理与运算,运算规则一般基于16进制或10进制。强模利用比较器允许超过15信号强度的特性,利用0~2,147,483,647信号强度的模拟信号进行的运算与处理。有的模拟电路也会使用小于0的红石信号进行计算。
模电相较于数电速度稍慢,体积稍小。
机械电路[编辑 | 编辑源代码]
机械电路,简称械电,即利用活塞、黏性活塞、发射器等的种种游戏特性来实现目标的电路。
根据设计目标,可分为高速械电和高压械电等。高速械电优先追求速度,其次追求减小体积(比如0.15s开门的2×2无痕玻璃门)。高压械电优先追求减小体积,其次追求速度,所以通常时序复杂(比如体积仅760方块的6×6活塞门,开关门共75分钟)[1]。
飞行器科技[编辑 | 编辑源代码]
主条目:Tutorial:飞行器
飞行器科技,又称航械、黏液块技术(绿萌)、活塞虫等。飞行器科技脱胎于械电,利用活塞和黏液块/蜂蜜块实现可单向或多向航行的机械,也能用来可移动的其他类型的电路,例如世界吞噬者、移动矢量炮、移动3×3门等。
生存实用电路[编辑 | 编辑源代码]
生存实用电路,简称生电。生电的定义范围较广泛,通常集数电、模电、械电三家之长,主要特点是为生存模式服务,因而追求耗材少、卡顿低、稳定性强等。
TNT大炮[编辑 | 编辑源代码]
主条目:Tutorial:TNT大炮
TNT大炮基于对于TNT实体的研究与模型建立,炮膛设计等。
矢量炮[编辑 | 编辑源代码]
矢量炮即利用正交分解,通过控制两个互相垂直炮膛的TNT数量,来实现控制两个互相垂直且作用于弹头的同一点上的力,以实现精确的打击效果。
基本电路[编辑 | 编辑源代码]
虽然建造电路的方法无穷无尽,但特定功能的电路建造样式是比较固定的。下面的章节对一些电路进行了分类,每个章节有独立的主条目用于描述具体的电路设计方案。
某些电路可能只能完成最简单的控制功能,但只需要将数个此类简单电路组合,便能组成复杂的、能够满足目标的大型电路。
脉冲电路[编辑 | 编辑源代码]
主条目:脉冲电路
一些电路需要特定的脉冲来工作,也有一些电路用脉冲传达特定信息。在这样的环境下,脉冲电路派上了用场。
在一个状态稳定,另一个状态不稳定的电路通常称为单稳态电路(monostable circuit)。大多数脉冲电路属于单稳态电路,因为它们的激活态(非稳态)只能持续较短时间就回到稳定态。
- 脉冲发生器:产生特定长度的脉冲。
- 脉冲限制器:可以缩短过长的脉冲。又称脉冲缩短器。
- 脉冲稳定器:可以延长过短的脉冲。又称脉冲延长器。
- 脉冲延迟:能够为脉冲提供延迟(部分脉冲延迟会改变脉冲长度)。
- 边沿感应器:在信号变化时输出脉冲:从0到1(“上升沿”感应器)或从1到0(“下降沿”感应器),或两者均感应(“双边沿”感应器)。
- 脉冲长度识别器:能够在输入脉冲长度在某个范围内时输出信号。
时钟电路[编辑 | 编辑源代码]
主条目:时钟电路
时钟电路为持续、重复提供特定长度脉冲的脉冲发生器。一些时钟电路自动工作,另一些则可控工作。
从一次脉冲的开始到下一次脉冲的开始,这段时间的长度被称为时钟电路的周期。在一个周期中,一次脉冲的长度与这个周期的总长度的比值叫做占空比,占空比并非越高越好。
简单的时钟电路只有两个等长的状态(占空比为50%)。例如1rt激活,1rt非激活的时钟(2rt周期时钟)。
环时钟
使用中继器、比较器甚至红石火把组成链,使链的头尾相接组成环,以此作为时钟电路。组成环的元件数量决定了环的周期。具有两种设计:旋转环(单纯使信号在环内旋转,易于理解)、反相环(在旋转环的基础上使信号每周期反转,同样的元件数量下周期长度是旋转环的两倍。通常需要比较器、红石火把以获得反相功能)。
漏斗时钟
漏斗时钟通过漏斗链循环传递物品,并通过红石比较器侦测输出。漏斗时钟的体积与耗材极小。
活塞时钟
利用活塞或黏性活塞对方块的推拉延迟建造时钟。活塞时钟的耗材较高且占空比通常难以控制(例如建造一个单周期占空比50%的活塞时钟通常极为困难)。
侦测器时钟
摆放两个观察端彼此相对的侦测器,在其后摆放红石元件即可。
其他时钟设计
时钟电路也可以基于唱片机、阳光探测器、矿车、船、掉落物品的自然消失、水的流动等。
传输电路[编辑 | 编辑源代码]
主条目:传输电路
利用多种传输元件与游戏机制,我们能构建出满足各种需求(如高密度、高速度、高吞吐量、低卡顿等)的传输电路。
信号中继器[编辑 | 编辑源代码]
信号中继器的目的是让“中继”信号,即让信号传输更远。最简单的中继器就是红石中继器,它使信号强度变为15以传输得更远。也可以使用如下电路:
- 瞬时中继器:在不引入延迟的情况下中继信号。
- 双向中继器:具有两个端口,都具有输入输出(可以从来回两个方向中继信号)。
二极管[编辑 | 编辑源代码]
“二极管”指只允许信号单向传输的电路,通常用于防止线路反向传输信号引起的:错误触发、线路串扰或延迟紊乱。常用的无延迟二极管有:台阶、玻璃或漏斗等。
有的元件本身便具有单向性,因为它们的输出端不接受输入信号(例如红石中继器、红石比较器、红石火把等)。
纵向传输电路[编辑 | 编辑源代码]
虽然横向传输较为简单直接,但有时我们更需要纵向传输来满足需求。此处列举一些简易的纵向传输电路:
向上纵向传输
向下纵向传输
基岩版中的双向垂直梯子
红石楼梯
最简单的纵向传输就是在斜向上的方块上铺设红石线,或是使用2×2的螺旋结构等等。红石楼梯支持向上向下传输信号,无延迟,但占地较大,传递至多15格就需要中继信号。
红石梯子
因为荧石、倒置楼梯与台阶上方能够放置红石线的同时不会隔断红石线,信号就能够在2×1的“梯子”上纵向传输,但仅能向上传输,这也相当于一个纵向的二极管。红石梯子占地小,无延迟,但每15个就需要中继。在基岩版中,可以通过玻璃或活塞构建1×2的梯式纵向双向传输。红石梯速度极快但占地稍高。
火把塔
红石火把能够充能其上方的方块并激活毗邻的红石元件。利用该特性,纵向传输便成为可能(向上与向下的设计不同)。火把塔耗材低且占地少,但延迟较高。
侦测器导线
利用侦测器可以检测其他侦测器,组成一条侦测器链,可以构建一条任意方向的传输线路。侦测器导线延迟极高但占地极小。
但是,可以使用可激活且可被检测的方块(如钟、发射器、投掷器、门、活板门、栅栏门、漏斗、音符盒、活塞、动力铁轨、激活铁轨、红石灯等)来增加侦测器间距而延迟不变,还能在此基础上添加红石粉与红石导体来再次提升侦测器间距。进而压缩侦测器链所使用的侦测器数量(并提升速度,部分情况下还能降低卡顿)。所使用的可激活且可被检测的方块也会使得侦测器导线具有不同的延迟与特性。
模电传输电路[编辑 | 编辑源代码]
通用传输方案
若需要无损传输信号(即保留原有信号强度)。通用传输方案自然是首选。
最基础的模电导线,最高Nrt传输2N格。它通常有些慢
利用强弱充能提速的更快的模电导线,最高Nrt传输4N格
直接使用比较器充能红石导体或红石线,再激活下一个比较器再充能下一个红石导体或红石线(由此循环往复)直至到达目标位置。还可以利用方块的强弱充能来增加传输距离。
如果需要上下传输模电信号,可以利用红石粉可以充能下方的红石导体的特性来让信号无损下传(且允许2高堆叠);上传线路则需要通过比较器强充能输出处的红石导体并充能上方红石粉来完成(无法2高堆叠,会串线)
通用传输方案的灵活性极高,耗材中等,但速度极慢。
中继器传输方案
若需要长距离或快速地传输模电信号,也许将其转为二进制信号再传输无疑是不错的方案,但这会带来额外的转换延迟以及转换器的体积(并大幅增加耗材)。能否快速地直接传输模电信号呢?答案也许简单得令人不可置信!
- 利用Minecraft红石本身的衰减特性,搭配红石中继器,我们便能获得一种最快的模电导线。
- 世界上最快的模电导线,Nrt可传输14N+1格。灰色是输入,黄色是输出。
- 以二叉树形式布置的快速模电导线,仅用1rt便可将输入送达全部8个输出。灰色是输入,黄色是输出
这种模电导线极其强大!最大吞吐量高达10Hz且允许信号上下传递!你还能像红石梯一样布置这样的模导线!
这种设计还可以在强度范围小于0~15时可以无视部分“线损”来减少所使用的元件数量,以此来在速度不变的前提下降低卡顿与耗材。
中继器传输方案的灵活性稍低,耗材稍高,但速度极快。
杂项传输电路[编辑 | 编辑源代码]
阳光探测器传输
这种传输技术也被称为光电。原理是利用在晴天的白天太阳光无遮挡时恒为15级亮度,可以构建一条仅白天的无视竖直距离、无延迟、竖直传输路径(其他方向难度大、距离短),称为“光路”。只需要使用活塞推拉方块或发射器(组)控制流体来控制光路的遮挡,就能控制在此光路中的阳光探测器输出信号。阳光探测器遮挡控制器也被称为光控。光电的特点是传输连续信号。
在Java版中,阳光探测器每1s更新一次(最高可实现1Hz信号传输);在基岩版中,阳光探测器每1rt都会更新(最高可实现10Hz信号传输,需使用4个黏性活塞或3个发射器构建的10Hz专用光控)。
实体传输
主要包括利用弹射、坠落、气泡柱升降移动实体到感应位置,可以自带复位(两个单项的收发反向重合),可以实现穿墙传输,通常距离越远实体速度越快,延迟通常较难计算,需对游戏机制有一定了解。实体传输的卡顿通常稍高但能极大拓展布线可能性。
墙传输
利用Minecraft墙体的模型机制与侦测器可以检测墙体模型更新,可以使用墙体搭建一条竖直下传线路并用活板门控制。这种技术称为墙电。特点是传输信号边沿。
墙电在Java版中是无延迟下传的,在基岩版中则是1gt下传1格,侦测器。
树叶传输[仅Java版]
利用侦测器可以检测树叶连接或断连原木,可以使用树叶搭建一条任意形式的线路并用活塞或粘性活塞与原木控制。这种技术也称为树电。特点是传输信号边沿。
树电的最大传输距离为7个树叶。
气泡柱传输
利用侦测器可以检测气泡柱变化,可以通过搭建一条完全竖直的水柱并于底部通过活塞或黏性活塞控制灵魂沙或岩浆块控制气泡柱进行上传传输。这种技术也称为泡电。特点是传输信号边沿。
泡电在Java版中是无延迟上传的,在基岩版中则是1gt上传1格。
逻辑电路[编辑 | 编辑源代码]
主条目:逻辑电路
参见:Tutorial:基本逻辑门
通过判断输入信号是否满足逻辑,满足则产生特定输出。这类电路即为人们耳熟能详的逻辑门。
A | 开 | 开 | 关 | 关 | 对应语言表述 |
---|---|---|---|---|---|
B | 开 | 关 | 开 | 关 | |
非A | 关 | 关 | 开 | 开 | A为0吗? |
A或B | 开 | 开 | 开 | 关 | 有输入为1吗? |
A或非B | 关 | 关 | 关 | 开 | 输入均为0吗? |
A与B | 开 | 关 | 关 | 关 | 输入均为1吗? |
A与非B | 关 | 开 | 开 | 开 | 有输入为0吗? |
A异或B | 关 | 开 | 开 | 关 | 两个输入不同吗? |
A同或B | 开 | 关 | 关 | 开 | 两个输入相同吗? |
A蕴含B | 开 | 关 | 开 | 开 | 若A为1,B也为1吗? |
- 非门(即“反相器”):输入与输出相反。
- 或门:任意输入为1时,输出为1。
- 或非门:任意输入为1时,输出为0。
- 与门:所有输入都为1时,输出为1
- 与非门:所有输入都为1时,输出为0。
- 异或门:输入不同时,输出为1。
- 同或门:输入相同时,输出为1。
- 蕴含门:仅当第一个输入为1,第二个输入为0时,输出为0。
其中非门为一元逻辑(具备单个输入)。
其余逻辑门均为二元逻辑(具备两个输入)。
或门输出取反即为或非门。与门输出取反即为与非门。
异或门与同或门可以于任意输入输出添加非门来转换(总数须为奇数个才可转换,总数为偶数个逻辑不变)。
记忆电路[编辑 | 编辑源代码]
主条目:记忆电路
与逻辑电路只反映输入信号不同,记忆电路的输出不单与输入相关,还与“过去的输入”相关。这样能够完成对电路过去状态的“记忆”。在现实生活中的电子学中,锁存器(Latch)指对输入信号的某个状态产生反应的电路;触发器(Flip-flop)指对输入信号的变化产生反应的电路。有很多记忆电路可供选择,下面是常见的几种。
RS锁存器
RS锁存器用于状态寄存。具有输入Set(简写S,改变状态)与输入Reset(简写R,重置状态),输出O与输出O'(O和O'的状态总是相反)。当输入S为1:输出O为1,O'为0;当输入R为1:O为0,O'为1。
RS锁存器的逻辑结构是两个或非门,在Minecraft中可以使用两根火把实现RS锁存(其为Minecraft最古老也是最常见的记忆电路)。
T触发器
T触发器用于信号切换(类似拉杆)。具有输入Input(简写I)与输出Output(简写O)。当I满足条件(为0?为1?上升沿?下降沿?)时翻转O的状态(1变为0,0变为1)。
D触发器
D触发器用于储存。具有常规输入Input(简写I)与时钟输入Clock(简写CLK)以及输出Output(简写O)。当CLK为1时O会被设为I的状态,当CLK为0时O会保持原有状态。
D触发器可以视作RS锁存的升级版(且D触发器的确可RS锁存实现),中继器实际上也是D触发器,但CLK被取反。
JK触发器
与RS锁存器相似,但RS锁存器不支持R端和S端同时为1,而JK触发器在J端和K端同时为1时则翻转输出信号(1变为0,0变为1)。现实中用它来实现T触发器,但在Minecraft中用处不大。
杂项电路[编辑 | 编辑源代码]
主条目:杂项电路
参见:Tutorial:高级红石电路
随机信号发生器
随机信号发生器能够随机产生无法预测的信号。一些随机信号发生器利用了Minecraft的随机特性(如仙人掌生长,发射器与投掷器对执行槽的选择),活塞互推的优先级[仅基岩版];另一些则通过实现数学上的伪随机算法来实现。
示波器
分为数字示波器与模拟示波器:数字示波器为多个中继器依次连接组成的中继器链,据此能够通过点亮的中继器直观地测量脉冲长度。亦或者直接观察数字串行数据串;模拟示波器则是多个比较器依次连接并在每个比较器间布置强度显示器来构成,能直观测量脉冲能量强度。亦或者直接观察模拟串行数据串。
计数器
计数器(Counter)是用于记录输入满足条件次数的装置,二进制计数器(或称数电计数器)通常由级联的T触发器构成,因此其计数条件与选用的T触发器的满足条件相关。而模电计数器(进制为3~16不等)通常由模寄存器与进位判断构成。
方块更新探测器
方块更新探测器(Block Update Detector,缩写为BUD)即将方块更新(例如石头被挖掘,水变成冰,南瓜长出等等)作为输入,检测到输入后执行特定反应的电路。单稳态BUD反应为输出脉冲,而T-BUD(双稳态BUD)反应为切换输出状态(也可以用单稳态BUD搭配T触发器实现)。侦测器也被认为是单稳态BUD的一种。在Java版中,BUD通常依赖于活塞。Tutorial:方块更新感应器有更多信息。
选择器和分配器
选择器(也称多路选择器、数据选择器、集线器),拥有多个输入,一个输出以及选择输入C,通过C的输入决定输出哪个输入。
分配器(也称多路分配器、数据分配器、分线器),拥有一个输入,多个输入以及选择输入C,通过C的输入决定输入接入哪个输出。
搭配选择器与分配器,可以构建一条数据总线,可让任意输入端连接到任意输出端(并省去大量的专用传输线路),同时允许的连接数取决于设计通道数。
建造电路[编辑 | 编辑源代码]
计划[编辑 | 编辑源代码]
建造红石电路的第一步是确定电路能做些什么。
- 应该在哪里控制整个电路?如何控制?
- 电路是由玩家控制,生物移动控制或是其他控制方式?
- 电路能够实现什么样的功能?
- 照明、推动方块/生物、识别物品或其他?
- 信号如何从控制端传向机械?
- 需要将多个来源产生的信号组合到一起吗?
建造[编辑 | 编辑源代码]
建造电路时使用特定的方块组合是个不错的习惯,以便于区分电路的范围。常见的选择有石英、铁块、染色方块(如羊毛、混凝土、陶瓦等)不同的方块便于区分电路的不同部分。
当在液体附近建造电路时要注意。很多电路元件会被液体破坏。
建造包含TNT的电路(如陷阱或大炮)时要格外小心。建造中的电路可能会意外点燃TNT,因此请控制放置TNT的时间。例如,如果你将红石火把放置在被充能的方块上,它将不知道它应该关闭并且可以短暂地为电路提供信号,直到下一游戏刻。在电路的其余部分完成后放置TNT将有助于避免此类问题导致的机器损坏。这也适用于可能通过这种动作意外启动的电路的任何其他特征(例如,在电路准备好之前先激活发射器或准备好电路后再填入发射器内容物)。
解决问题[编辑 | 编辑源代码]
当电路出问题时,仔细检查,尝试寻找出问题的来源。
- 是否在从一个弱充能方块引出信号?也许需要红石中继器使其强充能,或者用红石中继器引出信号。
- 是否让红石信号穿过了一个红石绝缘体?用红石导体代替它,或者绕道而行。
- 是否无意中建造了一个短路电路,使得本来应当激活的红石火把烧毁了?修正短路电路,并更新红石火把的状态。
- 本不该激活的电路部分是否错误激活了?也许不小心把不同部分的线路之间连了起来。
- 活塞、发射器或投掷器的激活方法是否错误?
优化[编辑 | 编辑源代码]
电路正常工作后,考虑一下是否能够提高电路的性能。
- 能让电路反应更快(延迟更低)吗?
- 减少信号传输中不必要的元件,如中继器,红石火把。
- 优化电路逻辑,将“输入”-“结果”路径缩短。
- 能让电路更小吗?
- 能否使用更少的方块?
- 能否优化传输路径走线?
- 优化电路逻辑,尽可能减少无效体积。
- 能让电路更稳定吗?
- 电路高频工作时依然能正常工作吗?
- 电路在频繁地激活/非激活交替下依然能正常工作吗?
- Minecraft新版本的特性是否有助于提高电路的效率?
- 电路噪声能小一些吗?
- 能尽量少用发出声音的方块吗?
- 能够减少任何卡顿吗?
- 许多红石元件经常改变状态,导致大量的光照计算、声音、粒子渲染,从而导致计算上或渲染上卡顿,能否尝试抑制这些无用计算?
- 是否能锁漏斗控制其只在需要工作时尝试吸取和输出?能否在漏斗上放置堆肥桶使漏斗卡顿最低化?
这篇关于红石电路(我的世界)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!