我罗列了Minecraft中的输出元件,这些都会在接收到信号时做出反应
漏斗 TNT 音符盒
木 铁活版门
各类栅栏门 各类门 铁门
这些是最简单的输出 只要有具有信号的方块贴着他们,他们就会做出反应
命令方块同样,只要有具有信号的方块贴着他,就会执行指令
而活塞 粘性活塞 投掷器 发射器这四个方块,具有复杂的激活判定,这些都是复杂的输出元件
再次列举所有的输入元件
这些输入元件 又分为两大类
阳光传感器和红石块不具有附着,他们可以浮空放置 他们在可以发出信号时本身会作为一个强充能方块。
其余的元件具有附着,他们本身作为一个强充能方块,同时,他们还会强充能自己的附着。
重点重点!
红石需要传递,而传递依赖的是【方块更新】
以这个例子来看,拉杆拉下,红石灯亮起
首先!拉杆拉下,系统会更改拉杆的一个方块数据值:powered
powered由false变为true 拉杆显示成了拉下的状态
紧接着,系统给了拉杆周围的六个方块一个【方块更新信号】
拉杆的附着,图中的铁块接收到了来自拉杆的方块更新信号,检查自己的状态,发现自己是拉杆的附着,此时拉杆已经拉下,自己应当被强充能。
自己既然被强充能,就应当给周围6个方块更新信号,指针所指的红石粉接受到了这个更新信号,检查自己的状态,发现自己被强充能的铁块所激活,因此!被点亮,计算power值为15
指针所指的红石也会给周围更新信号,但是红石比较特殊,他的更新信号传递的更远一些,能达到2格的距离,不过我们不需要那么远,在他右边紧邻着着的是另一个红石粉,更新信号传递到这里,右边的红石粉也发现自己应当被传递红石信号,power是14
右边的红石有了变化,由未激活变成了power14 于是给予周围更新信号,这个范围内有一个红石灯
红石灯检查自己的状态,自己是一个红石粉的指向,应当被激活,于是亮起 原先的redstone_lamp变成了lit_redstone_lamp
既然自己有所更改,就应当给周围6个方块更新信号,自己是一个非透明方块,被红石线弱充能,但是周围没什么可以被自己传递的了,更新信号传递结束。
更新信号传递结束后,系统完成了任务,将所有方块变成现在的状态,这个游戏刻做的事情完成,进入下一个游戏刻(当然在一个游戏刻里除了处理方块更新信号还有很多事情,比方说时间,太阳的高度,方块刻的给予,怪物和动物的生成以及其他很多,我们暂时不讲)
这就是一个简简单单的点亮一个红石灯的细节,在这一个游戏刻里,有40-60个方块被给予了方块更新信号,但是他们并没有都做出反应,每个方块都检查了一下自己是否处在正确的状态上,只有不在正确的状态上,才会修改自己的状态并且传递下去。
同时你还要认识到不同方块具有不同的更新范围,譬如红石粉的更新范围就比红石块的更新范围大,有附着的输入还会给自己的附着一个更新信号...还有很多的范围,譬如红石火把 红石中继器 红石比较器这些的范围都较大,熄灭的红石火把和点亮的红石火把的范围还不一样,箱子也具有不同的更新范围,但是大多数方块的更新范围都是自己周围的6个方块。
除了红石,很多事件都会触发更新,譬如说放置或者破坏一个方块,同样会给予周围6个方向更新信号。
我到过一个盗版服务器群,里面的人大多都不太了解红石,有人认为只要红石粉是点亮的,就会造成卡顿,这是对于红石基础没有掌握所导致的,事实上,真正造成卡顿的是方块更新信号,点亮一个红石灯就会造成大约50次更新检查,大一些的红石机械造成的更多。
这个方块更新信号是比较重要的,我码了这么多字也应该留一些时间让你们理解透彻,所以,就是这样!