# 基础概念

可能你现在无法完全理解这些概念, 没有关系, 你先浏览一遍, 在之后阅读过程中碰到这些概念, 再回来查阅.


# 什么是"红石"?

"红石(Redstone)"是"红石粉(Redstone Dust)"的简称, 但是在日常交流中, "红石"通常用于代称"红石电路系统".

"红石系统"最主要的用处是制造自动化装置, 比如自动开门装置、自动收割小麦装置, 甚至是制作一台计算机!

"红石粉"是红石系统最基础的物质, 不光用于传输红石信号, 还会用于合成其他红石元件.

红石信号有 2 个属性:

  1. 数字信号: 只有 2 种 -- "有"和"无" ("充能"和"未充能")
  2. 模拟信号: 即信号强度, 有 0 ~ 15 共十六种

对应的, 红石电路可以分为 2 种:

  1. 数字电路: 和现实生活的数字电路有些类似
  2. 模拟电路: 和现实世界的模拟电路完全不同

# "供能元件" "传输元件" "调节元件" "输出元件" "监测元件"

以生活中常见的"声控灯"为例:

  • 发电厂属于"供能元件"
  • 电线属于"传输元件"
  • 监测声音以打开"声控灯"的是"监测元件"
  • 变压器属于"调节元件"
  • 灯泡属于"输出元件"

在 Minecraft 的红石电路中:

在游戏中, "红石元件"分布于"背包"的"红石"标签页和"交通运输"标签页


# 红石矿

Redstone_Ore

在"创造模式(Creative Mode)"中, 红石粉的供应都是无限的, 但是在"生存模式(Survival Mode)"中, 需要我们自己去采集和炼制.

在"生存模式(Survival Mode)"中, 我们可以通过挖掘"红石矿石(Redstone Ore)"获得"红石粉", 1 个红石矿石可以掉落 4~5 个红石粉.

注意, 红石矿石只能用铁镐或者金镐、钻石镐采集才会掉落红石粉, 使用手工或者木镐石镐都不会掉落东西.

# 如何采集红石粉?

红石系统最基础的原料就是"红石粉(Redstone)", 它不仅仅用来组成必要的红石电线, 还被用来合成其他红石装置.

在"创造模式(Creative Mode)"中, 红石粉的供应都是无限的, 但是在"生存模式(Survival Mode)"中, 需要我们自己去采集.

在"生存模式(Survival Mode)"中, 我们可以通过挖掘"红石矿石(Redstone Ore)", 然后放入"熔炉(Furnace)"中冶炼, 从而获得"红石粉(Redstone)".

红石矿石和红石粉

就像现实世界一样, 矿藏的分布是有规律的. Minecrafrt 世界中的"红石矿石( Redstone Ore)"的矿脉分布也是有规律的, 都在游戏世界的 16 层以下. 也就是说, y 轴坐标 1~16 之间, 我们可以通过按键 F3 获得这个 y 轴坐标信息. (切记: 出于安全考虑, 永远不要在脚底下往下挖矿)

当前所处的y轴坐标

如下图所示, 就是红石矿脉:

红石矿脉

每采集一个红石矿石, 会得到 4~5 个红石粉.

如果你使用"幸运附魔(Forture)"的镐子采集,1 个红石矿石最多能够掉落 8 个红石粉

注意, 红石矿石只能用铁镐、金镐或者钻石镐采集才会掉落红石粉, 使用手工或者木镐石镐都不会掉落东西.

  • "石镐"可以挖石头和铁矿
  • "铁镐"可以挖石头、铁矿、金矿、钻石矿、红石矿石
  • "金镐"和"钻石镐"可以挖所有矿石, 但是只有"钻石镐"可以挖黑曜石

# "红石能量" 和 "红石信号"

一般而言, "红石能量"和"红石信号"指的是相同的东西. 不过, 在特定的上下文中, 其强调的侧重点有所不同:

  1. 红石有强度属性, 比如"红石火把"产生的红石能量是 15 单位强度, 用红石线传输时, 最长只能传输 15 格的距离. 所以, 我们在设计红石线路时, 需要计算能量强度. 从这个角度看, 用"红石能量"来表述更准确.
  2. 同时, 和现实生活不同, 红石设备没有"额定电压 (Rated Voltage)"的要求. 只要有红石能量, 无论是 1 个强度还是 15 个, 都可以激活红石设备. 或者, 我们可以理解成 -- 所有红石设备的"工作电压(Working Voltage)"都是 1 ~ 15 个强度; 只要有 1 个强度红石强度, 就能驱动红石设备. 从这个角度看, 我们可以淡化"红石能量"的概念, 理解成 -- 只要有"红石信号"就可以激活任意红石设备.

其实我们也可以理解成红石信号有 2 个属性:

  1. 数字信号: 只有 2 种 -- "有"或者"无" ("充能"或者"未充能")
  2. 模拟信号: 即信号强度, 有 0 ~ 15 (一共 16 个等级)

在我刚研究红石系统时, 因为把"红石"类比做现实生活中的"电", 所以用"红石能量"来表述. 到了后期, 对红石系统有了更深入的认识, 我更喜欢用"红石信号"来表述. 如果某些情境下需要强调其强度属性, 才会用"红石信号强度"来指称


# "红石信号强度"

红石信号会随着距离衰减, 每走一格衰减 1 单位强度.

供能元件(比如红石火把和拉杆)可以为红石线提供 15 单位的"红石信号强度", 所以最大的传输距离是 15 格, 超出 15 格后, 红石线失去信号(信号强度衰减为 0 ).

你也可以把"红石信号强度"理解成还可以传输多少格距离. 比如说, 如果有个红石粉的红石信号强度是 7 个单位, 也就意味着它能够传输 7 格距离.

下图中, 数字表示"红石信号强度":
![红石能量衰减](./media/energy-decay-of-redstone.png)

# 红石线的连接类型

我们约定将红石的连接形状命名为:

  • 点状
  • 线性连接
  • 拐角连接
  • 丁字连接
  • 十字连接

红石连接


# "充能" 和 "激活"

  • "充能": 表示积蓄了红石能量, 能够往外提供红石信号, 用于"激活"红石元件
  • "激活": 表示驱动红石元件激发反应, 比如"红石灯"点亮, 比如"活塞"推动

# "脉冲电流"

"脉冲信号"听起来很高大上, 其实就是指像"脉搏"一样间歇起伏 -- 在一个周期内, 大部分时间没有信号, 只有短暂时间有信号, 是间歇性的, 而不是连续的.

"脉冲"这个词就是取自"像脉搏一样波动"之意. 下图就是心电图中脉搏跳动的波形:

心电图_脉搏2

在 Minecraft 中, 需要注意区分"脉冲电路"[1]和"时钟电路"[2]:

  1. "脉冲电路 (Pulse Circuit)"不强调多次触发, 而是着重于调节红石信号的长度, 让红石装置以确定的时间长度维持激活状态. 比如说, 我们希望自动门被激活后, 打开 5 秒后再自动关闭, 这时候就需要"脉冲电路"
  2. 强调多次循环触发的, 被称为"时钟电路 (Clock Circuit)". 同时, "时钟电路"也能产生脉冲, 不过是持续的脉冲

# "透明方块" 和 "非透明方块"

在 Minecraft 中, "透明方块"的特性包括:

  • 不会"压线"[3]
  • 不会被充能
  • 可以穿透"信标(Beacon)"的光束

而"非透明方块"的特性则与之相反 -- 会"压线"[3:1], 会被充能, 信标光束无法穿透.

那么, 哪些方块属于"透明方块", 哪些方块属于"非透明方块"呢?

为了讲解明白, 我们需要先要引入两个概念 -- "物理透明性"和"光学透明性".

  • "物理透明性"是指物品外观是否透明
  • "光学透明性"是指能否透过这个方块看到其他方块

举例来说:

  • "圆石"是物理不透明, 光学不透明的方块
  • "玻璃"是物理透明, 光学透明的方块
  • "萤石"和"红石块"是物理透明, 而光学不透明的方块.

而 Minecraft 的"透明方块"和"非透明方块"是依据"物理透明性"来划分的, 而无关"光学透明性". 所以, "玻璃"、"萤石"和"红石块"都属于"透明方块".

danger 例外: "粘液块(Slime Block)"属于"透明方块", 可以穿透"信标"光束, 但是会"压线", 也会被充能. "粘液块"兼具了"透明方块"和"非透明方块"的特性.


# "全体积方块" 和 "非全体积方块"

完全占满 1 x 1 空间的方块就是 "全体积方块", 其余的(没有占满 1 x 1 空间)就是"非全体积方块".

下面的就是"全体积方块":

Chest

下面这些就是"非全体积方块":

hoppe


# "压线"

"压线"是指普通方块交错放置时, 会阻断红石信号的现象.

在 Minecraft 中, 普通方块会"压线", 只有 3 种特殊方块不会"压线":

  • "透明方块"[4], 比如"玻璃(Glass)"和"冰(Ice)"
  • "非全体积方块[4:1]", 比如"半砖(Slab)
  • “活塞”

压线

板材没有压线现象

"非全体积方块"除了"半砖(Slab)"这种特征明显的非全体积方块, 还包括"漏斗(Hopper)"、"楼梯(Stair)"、"活塞(Piston)"和"粘性活塞(Sticky Piston)":

不会压线的非全体积方块

不会压线的活塞


# "四周" 和 "相邻"

我们约定, 将方块平面上的四个方向的位置叫做"四周", 将方块的六个方向的位置叫做"相邻".

约定_四周和相邻


# "附着" 和 "生根"

大部分红石元件需要放置在某个方块上面, 称为"附着"在某个方块上(在工程设计行业中, 称为"生根", 非常的形象. 但是在这里, 我们会遵从 Minecraft 社区的习惯, 称其为"附着").

如果击碎红石元件附着的方块, 红石元件便会以物品的形式掉落. 如果直接击碎红石元件, 则不会以物品形式掉落! 所以, 如果我们打算重复利用资源, 应该击碎红石元件所附着的方块, 而不是直接击碎红石元件.


# "掉落" 和 "发射"

在 Minecraft 中, 物品有两种状态, "掉落状态"和"发射状态". 从字面上就能理解:

  • "掉落"表示物品自然掉下来, 比如瓜熟蒂落
  • "发射"表示人为将其弹射出去, 比如射箭

在 Minecraft 中:

  • "掉落"出的物品不会伤害别人, 而且可以被重新拾取. 比如说"工作台"被击碎, 呈"掉落状态", 我们可以重新将其拾取放入背包!
  • "发射"出去的物品, 则可以伤害到目标. 同时, 也可以被拾取.

比如, "发射器(Dispenser)"[5]可以"发射"箭矢, 而"投掷器(Dropper)"[6]则会丢出箭矢, 让其呈现"掉落状态":

发射状态vs掉落状态


# "潜行"

在早期的 Minecraft 游戏中, 游戏角色经常会因为从高处边缘掉落而意外死亡, 所以之后开发人员引入了"潜行"功能 -- 当我们按住 Shift 键, 再移动角色, 就不会从任何的边缘失足掉落.


# "刻" "游戏刻" "红石刻"

"刻"的本质是 Minecraft 设定的时间单位, 就像现实生活中使用的"秒、分、小时"一样.

为什么 Minecraft 不直接使用"秒"作为时间单位, 而要引入"刻"这个概念?

  1. 在游戏开发中, 几乎所有的程序都是由一个大的循环程序运行. Minecraft 的开发人员将循环程序的一个周期称为"刻(tick)". 在这个时间内, 游戏进行更新(比如太阳移动, 饥饿值改变...)
  2. 由于程序每次循环的时间非常短 -- Minecraft 内部的循环程序是以每秒 20 个周期的速度在运行, 也就是说每个循环用时 0.05 秒. 为了方便游戏开发, 所以将这个 0.05 秒定义为 "1 个游戏刻"
  3. Minecraft 的开发人员将"红石系统"每次循环检测的时间设定为 0.1 秒. 同样的, 为了方便游戏开发, 将这个 0.1 秒定义为 "1 个红石刻"

所以:

  • 1 游戏刻 = 0.05 秒
  • 1 红石刻 = 0.1 秒
  • 1 红石刻 = 2 游戏刻

在 Minecraft 中的一天是 24000 游戏刻, 对应的是现实生活中的 20 分钟. 所以你要把游戏世界的时间改成中午, 需要输入命令/time set 6000

"游戏刻"和现实世界时间的对应关系并不是完全固定的. 如果电脑的性能非常差, 以至于无法达到游戏程序执行所需的速度, 那么完成一个循环程序需要的耗时将增加, 这也就是"游戏卡顿"的来源之一. 不过, 通常我们不需要考虑这个因素, 因为现在的计算机普遍都性能过剩, 而不是性能不足. 你只需要了解这个现象即可, 不需要为此担心

注意"简称": 你所看到的"刻"有可能是指"游戏刻"也可能是指"红石刻", 需要注意文章前后文的背景. 如果是讲"红石系统"的文章, 那么"刻"一般是指"红石刻", 如果是其他情况, "刻"一般是指"游戏刻"

红石元件所需的"红石刻":

  • "红石火把"在收到的信号后, 进行反转时会产生 1 红石刻延迟
  • "红石中继器"默认延迟 1 个红石刻, 我们可以用右键点击它, 可以将延迟调整为 2、3、4 红石刻
  • "活塞"和"粘性活塞"推出去需要 1.5 红石刻 (如果激活活塞的脉冲电流短于 1.5 红石刻, "活塞"和"粘性活塞"会将其推出去的方块留在推出的位置, 且活塞臂会瞬间缩回. 这样, "粘性活塞"无法拉回自己推出的方块)
  • "漏斗"传输或者抽取一个物品都需要 4 红石刻(如果是吸取掉落物则没有延迟)
  • "红石比较器"对收到的信号做出反应需要 1 红石刻
  • 激活"木质按钮"需要 1 红石刻, 产生的红石信号将持续 15 刻(不包括被箭射中的情况), 而激活"石质按钮"也需要 1 红石刻, 但是红石信号只持续 10 红石刻
  • 激活"压力板"需要 1 红石刻, 产生的红石信号将持续 4 红石刻

  1. 脉冲电路 ↩︎

  2. 时钟电路 ↩︎

  3. 关于"压线"的详细描述可以参考这里 ↩︎ ↩︎

  4. 关于"透明方块"和"非透明方块"的定义见 这里, 关于"全体积"和"非全体积"的定义见 这里 ↩︎ ↩︎

  5. 发射器 ↩︎

  6. 投掷器 ↩︎