小渊xyz吧 关注:54贴子:3,182

[红石教程]方块透明度、延迟机制与指向机制

只看楼主收藏回复

大家好,这里是小渊xyz!
我算是“教程主”吧,从开始写教程到现在,有将近两年了,现在在写的教程贴发在mc吧,也有10个半月了。
[教程]小渊的红石研究笔记 http://tieba.baidu.com/p/3864740574
在做教程的这些日子里,我深深地感到困难,靠我一个人很难做出普及的教程,我希望成立一个团队。此外我希望写一本教程的书,中国我还没有看到教程书的,国外虽然也有教程,也有过翻译但是我能感觉到,国外的红石体系不比中国的严谨。
我现在就想写这样一本书,因此我打算将我写好的一部分拿出来作为展示,就是标题中的这三章。
我的目的,一在于扫盲,给一些新手和一些有误区的人普及红石知识。这点其实让我很不爽,有不少人还是搞不清楚方块透明度的概念,甚至有的出教程的人搞不清楚透明度他竟然还来出教程!这让我很不能理解!方块透明度虽然不是在游戏代码中明明确确写着这个方块的属性,但是却是玩家们长期根据不同的用途对方块进行的分类。搞不清这一点就会搞不清很多东西。
我的目的其二在于——这是我写的书的内容,我希望有人多多改进,希望有人提出建议,所以各位大触随意提建议。如果能找到一起的人,也算是收获了~
那么,开始吧~


IP属地:山西1楼2016-05-15 07:45回复
    Opacity!透明度(虽然在英文里它的原意是不透明度,但是管他的)
    在服务器里使用透明材质包或矿物追踪mod时,明显的一个区别就是:使用透明材质包时,虽然石头全部变成透明的了,但仍然无法透过石头看到矿物,这是因为在Minecraft内部,为了减少运算...既然你看不到石头后面,那就不渲染石头后面了。
    但是要是玻璃后面看不到东西可就瘆人了,因此玻璃和石头属于两种不同的方块。
    那么,就让我们制作一个列表看看哪些方块是透明的吧
    在1.8前,give及setblock中方块的代码是数字ID,因此在当时人们需要把方块与ID一一对应,我们就用这个ID作为方块列表的编号吧。
    物品和方块一样都具有ID,但是很明显的,物品拥有超过256的ID,因此很容易把物品和方块区分开。
    截止到1.8 Minecraft的方块ID共有198个,到1.9快照则有214个
    其中,0-212是按序号来的,1.9快照新加入了结构方块,ID是255
    为了便于我们研究,我们可以给这些方块简单分类。譬如说木头是17号方块,不同的数据值包含了橡木,白桦木,从林木和云杉木。但是等后来Minecraft加入金合欢木和深色橡木时,没有给17号方块增加更多的数据值,而是新加入了一个162号方块来表示。为了简单,我们可以把这两个放在一块研究
    至于半砖,mojang就更偷懒了,有些方块用不同的数据值表示,有些半砖则另起一个ID,木门和栅栏等亦如此,我们放在一起考虑。
    很明显,我们可以发现,在众多方块中,一部分方块是完完整整的1*1*1的方块,比如说石头,玻璃,红石块


    IP属地:山西2楼2016-05-15 07:53
    回复
      2025-07-31 05:18:25
      广告
      不感兴趣
      开通SVIP免广告
      绝大多数的不完整方块都透明,但也有少数例外,我们先来看【物理学透明方块】
      物理学透明,指的是无法被充能,如果将其置于箱子之上,箱子也能照常打开
      我们在研究红石,所以常说的不透明方块和透明方块指的就是方块的物理学性质,这样的话,实体方块指的就是物理学不透明方块。
      所以说,只有物理学透明方块能被简称为透明方块,只有物理学不透明方块能被简称为非透明方块。除非特别声明,我们使用透明方块和非透明方块时,也默认指的是物理学特性。提到实体方块时,也一定是物理学非透明方块。
      首先,火把这些非固体方块,玩家可以直接穿透过他们,他们对于玩家来说就没有体积。
      那么能够阻挡玩家的方块自然具有碰撞箱,也就是固体方块的概念,有些固体方块是1*1*1的碰撞箱,有些例如半砖是不完整的碰撞箱。
      对于完整来说,碰撞箱完整是一码事,材质完整是另一码事,材质6面都是1*1的正方形就是材质完整,对于完整这个概念,则比较模糊,在使用的时候通常随情况而定。
      蜘蛛网不是固体方块,一般还是不把他当做“完整的固体方块”看待
      36号方块比较诡异,暂时还是不讨论他了。
      耕地虽然比普通方块低了一个像素,但是对于玩家来说,碰撞箱没有改变。材质是不完整的
      漏斗看起来完整,但是对于玩家来说碰撞箱不是1*1*1
      表里的完整方块就是碰撞箱完整,同时材质完整。
      我们把完整方块和物理学不透明方块标出来。

      矿物,矿物块,双半砖,命令方块都是完整方块。
      灵魂沙碰撞箱不完整,但是它是实体方块,材质却是完整的。
      此外材质不完整也是实体方块的是末地传送门框架,似乎很少有人注意得到末地传送门框架是可以被充能的吧。
      呐,咱们还是不研究1.9快照的东西了

      可以看到,大多数完整方块都是实体方块,个别除外

      实体方块也大多数是完整方块,个别除外。

      怎样检测一个方块是不是物理学透明方块呢?
      定义即是检测的根本 能被充能的方块就是实体方块
      压箱检测是定义的等价条件,只有能够阻止箱子打开的方块才是实体方块。
      此外,仍然有许多检测方式:压线检测、比较器满箱检测、矿车回弹检测。
      注意:实体方块和实体无关,名字虽然是这样说的,但是的确和实体无关。


      IP属地:山西3楼2016-05-15 08:10
      回复
        现在先来总结一下






        IP属地:山西6楼2016-05-15 08:21
        回复
          方块中,透明度是一个十分重要的属性,对于光学透明度来说,与之相关的通常还有亮度(0-15这个数值我们称为亮度等级)。
          首先说一下亮度,打开熟悉的F3界面,可以看到光照分为sky和block 即【天空光照】和【方块光照】
          快速回顾一下亮度的历史。
          在Classic版本中,光照是检测是否被阳光直射,是最早的【天空光照】的应用,亮度只有两个等级,即:被阳光直射或没有被阳光直射。
          在Indev和Infdev版本中亮度有了和现在一样的16个等级,但是真正的亮度和亮度等级是线性关系。
          从Alpha开始亮度等级变成和现在一样的指数衰减,意思是在主世界,亮度等级每减少1 亮度乘以80% 地狱为90%
          当减少到0时 亮度大约是80%^15=3.5% 而地狱里90%^15=20.5%,可以看出地狱最低光照也有20%,这也就是为什么即使在地狱里不插火把也不至于黑成一片。地狱里0等级亮度和主世界8等级亮度相仿。



          可以看到即使是透明的红石块也是挡光的 天空亮度被削弱到0


          IP属地:山西8楼2016-05-15 08:24
          回复

            玻璃则完全不会挡光
            有些方块是发光的,那么怎么检验他会不会挡光呢?
            先罗列一下会发光的方块。
            信标 火 岩浆 萤石 南瓜灯 红石灯 海晶灯 末地传送门 亮度是15
            末影烛 火把 亮度是14
            熔炉亮度是13
            地狱传送门是11
            红石矿是9
            末影箱和红石火把是7
            酿造台 龙蛋 末地传送门框架 棕色蘑菇是1
            这些被称为光源,光源在削弱天空亮度时,也和光学透明度有关。光学透明方块不会削弱,但是光学不透明方块会削弱到比自己的亮度低,因此这也可以用于检验是否是光学透明方块,另外,光学半透明方块会逐渐削弱天空亮度,多个光学半透明方块才能削弱到0
            因为别的透明度中没有半透明方块的概念,因此光学半透明方块可以简称为半透明方块。
            所以你会听到怪怪的一句话:水方块是半透明方块,同时也是透明方块。
            不过这个检测方法略有繁琐,我们常使用另一种。


            IP属地:山西9楼2016-05-15 08:30
            回复

              我们要说的另一个,是红石线的指向问题,这个在我之前的教程中一直没有被重视。
              首先我们要说到的是,红石线的指向并不总是和它贴图表现出来的一样。
              我们要搞清楚“本质上的指向”和“贴图看起来的指向”
              左下角那个看起来像拐了一个弯的红石其实是一个“一”字形状的红石,萤石半砖漏斗这些方块不会改变红石指向。因此有没有那个萤石上的红石对下面的那个红石是一样的。
              对于点状红石来说,它的指向是他的四周,这个很简单,我们只要确认贴图是点状红石的红石是真正的点状红石即可。
              本图来自 让他该人士说(贴吧ID) 的一个帖子,如下(禁止挖坟)
              http://tieba.baidu.com/f?kz=3162516078

              红石块下的红石似乎是一个点状红石,但再一细想,红石块是透明方块不压线,因此下面那个看起来是点状红石的红石实际上应该是线状的。因此红石灯没有被点亮。


              IP属地:山西12楼2016-05-15 08:43
              回复
                首先,我们要明确的一点是:红石线的指向是自己的弱充能的方向,除此之外,红石弱充能自己的附着,而绝不会弱充能自己上方的方块。这是和红石线的形态无关的。
                对于“一”字的线状红石,我们有强迫指向”的概念,如当拉杆被放置在红石线的一侧时,红石线的另一侧被迫指向了一个方块,这一点也发生在红石线与红石线之间。因为只有红石元器件和输入元件可以主动连接红石,因此也只有这两种方块能造成强迫指向

                接着,这条竖着的红石线,是隶属于处在下方的红石的。
                证明可以通过材质,也可以通过这一张图。

                对于线状红石来说,只有强迫指向是它真正的指向。


                IP属地:山西13楼2016-05-15 08:47
                回复
                  2025-07-31 05:12:25
                  广告
                  不感兴趣
                  开通SVIP免广告
                  我们来看几个实例。


                  在上述两张图中,第一张图的活塞伸出了,而第二张图的活塞没有伸出,这是因为第二张图中,下方的红石不是线状红石,是没有指向的。而第一张图中比较器强迫红石线指向了方块,方块弱充能,激活活塞。


                  IP属地:山西14楼2016-05-15 08:48
                  回复

                    这张图中,活塞没有伸出,因为只有上方的红石,强迫下方红石指向了下方的活塞

                    这张图中,多余的一个红石线其实强迫红石指向了方块弱充能活塞,没有这个红石,那个活塞还不会激活呢

                    当红石不再是线状红石时,便不再有强迫指向了,也就不再会激活这个活塞。

                    当在这里压线,使红石线变成一字红石时,其再次具有了强迫指向
                    但是由于更新问题,红石指向变更不会造成方块更新,成为一个红石指向BUD

                    触发后。
                    关于红石指向,很简单,也比较重要,希望大家已经掌握了。

                    现在试试解释这里面的4个活塞为什么会伸出或为什么不会伸出吧


                    IP属地:山西15楼2016-05-15 08:51
                    回复
                      当我们接上两个活塞时,可以得到以下的时序图。

                      很明显,在第一个活塞推出完成,激活第二个活塞时,仍然需要等待一个1gt的启动延迟,也就是说,活塞推出方块也会赋予下一个活塞启动延迟。
                      对于串联的所有活塞来说,每个活塞的延迟都是3gt 其中1gt为启动延迟,2gt为活塞的实际推出延迟。


                      IP属地:山西21楼2016-05-15 09:18
                      回复

                        这是拉杆激活中继器激活活塞的时序图。
                        很明显,中继器的延迟仍然是2gt 但是中继器并没有赋予活塞启动延迟。
                        (仍然记得什么叫1gt吗?跨过的小黑竖线的个数。忘了的话看1277楼和1279楼)
                        那么一个中继器和一个没有启动延迟活塞,延迟总计是4gt
                        我们可以这样的定义系统,在每一个系统中,都有输入元件,传输介质,和输出元件。活塞作为输出元件。
                        在一个系统中,如果有NTE元件,那么作为输出元件的活塞没有启动延迟,如果没有NTE元件,则有启动延迟。这看起来就像是NTE元件把启动延迟取消了一样。
                        当活塞推红石块激活另一个活塞时,这包含了两个系统,首先是第一个活塞被激活,其次是红石块激活第二个活塞。很明显第二个系统中没有NTE元件,那么第二个活塞有启动延迟,这是符合我们之前的时序图说法的。


                        IP属地:山西22楼2016-05-15 09:18
                        回复
                          在以下的说明中,将不再会说明方块的同步性

                          拉杆激活两个串联的活塞。
                          延迟为6gt 两个系统都不含NTE元件,两个活塞都有1gt的启动延迟,总计6gt
                          延迟为6pt,两个活塞固有延迟都为3pt,总计6pt

                          拉杆激活中继器激活活塞。
                          延迟为4gt 2gt中继器和2gt活塞。活塞启动延迟没有被赋予
                          延迟为4pt 1pt中继器和3pt活塞。中继器延迟被拉杆减少1pt

                          拉杆激活活塞机或中继器
                          延迟为5gt 拉杆赋予活塞启动延迟,活塞延迟3gt+中继器延迟2gt,总计5gt
                          延迟为4pt 活塞固有延迟3gt 活塞推红石块为上升沿同步信号,中继器延迟减少1pt 总计4pt


                          IP属地:山西25楼2016-05-15 09:19
                          回复
                            为什么我们要引入活塞刻呢?标准活塞刻的长度也是0.05s,为什么我们需要熟练的掌握活塞刻的应用呢?
                            这是因为活塞和其他NTE元件具有很多不同的性质,首先,它和NTE元件不是一起更新的,其次,他的开始推出和推出结束是在两个不同的位置更新的,还有一个重要的因素是:中继器不会理睬下降沿,当其自检时发现没有信号时才会准备熄灭,而活塞却会对下降沿信号有所反应,这体现在短脉冲上,这也是我们对活塞刻的用处之一,我们先从常见的短脉冲发生器入手

                            这是一个短脉冲发生器,如果这个短脉冲发生器作用于活塞,那么用活塞刻延迟再好不过,不过我们还是用游戏刻延迟模型同样的分析一次

                            很明显,我们之前做的一直是给延迟计时,现在开始要经常做的是给延迟做差,或者说延迟的比较。
                            上路是中继器的2gt延迟,下路是活塞的3gt延迟,可以看到,这个脉冲的长度即是活塞延迟减去中继器延迟,得到一个1gt长的脉冲(但是你可以看到是有2pt的)
                            这是一个从NTE开始,结束在TE的脉冲,1gt长,2pt长。
                            因为大多数时候短脉冲发生器都是作用于活塞的,因此我建议在衡量短脉冲发生器时使用活塞刻作为延迟计算,那么这就是一个2pt的短脉冲发生器,如果有必要,在说明这是一个1gt长的短脉冲发生器(因为活塞和中继器不能兼顾,相同gt数的发生器对活塞来说可能效果不同,相同pt数的活塞对比较器来说可能效果不同,比如这个2pt发生器就无法使比较器响应,而还有一类2pt发生器可以。)


                            IP属地:山西27楼2016-05-15 09:22
                            回复
                              2025-07-31 05:06:25
                              广告
                              不感兴趣
                              开通SVIP免广告

                              中继器2gt 无启动延迟活塞2gt 下方中继器2gt 这是一个0gt脉冲
                              第一个中继器1pt 活塞3pt 下方中继器2pt 这是一个1pt脉冲
                              上升沿在中继器的NTE 下降沿在活塞推到的TE

                              中继器4gt-2gt=2gt
                              中继器3pt-1pt=2pt
                              上升沿在中继器的NTE 下降沿在活塞推走方块的BE


                              IP属地:山西28楼2016-05-15 09:23
                              回复