redstone_machine...吧 关注:3,606贴子:60,864
  • 29回复贴,共1

关于1.8中中继器组bug的源码解释

只看楼主收藏回复

大家好,我是一个来混脸熟的代码渣~
前排召唤&感谢nenn触 @正正正正正好
之前在和nenn触的闲聊中,谈到了中继器串在1.8更新后无法通过1t负脉冲的问题,这显然是常识理解不了的,正好我对mc源码比较熟悉,结合源码终于对此现象做出完美的解释XD


IP属地:陕西1楼2015-10-09 13:12回复

    如图所示电路,在拉杆信号的下边缘,会输出一个1t负脉冲,后面接有3个中继器。中继器的响应情况是,前两个中继器可以观察到熄灭了1t,而最后一个中继器却毫无反应。类似现象可以拓展到N个中继器,而且只有最后一个中继器不响应。

    具体情况见
    http://tieba.baidu.com/p/3387440542
    中2、3、4楼。
    类似的比较器脉冲也有此问题:

    最后一个中继器保持常亮,不响应信号。而这一切在1.7版本中都还运行完好,所有中继器都有响应。


    IP属地:陕西2楼2015-10-09 13:14
    回复
      那么是什么造成了1.7和1.8的区别呢?答案在于1.8中对于红石中继器/比较器的优先级判定代码有改动!在mc中,如果一个中继器/比较器前方的方块也是中继器/比较器,那么这个中继器/比较器的优先级就会被提高一级。原本中继器优先级是-2,比较器优先级是0,优先级提升之后,中继器优先级变为-3,比较器优先级变为-1。
      此外,前方的中继器/比较器还必须满足一个条件才能提升此中继器的优先级,就是对于方向的判定。在1.7中,如果这两个中继器的方向相同,优先级提升将被取消。而在1.8中,这部分被修改为:如果这两个中继器的方向相反,优先级提升才被取消!
      至于1.7到1.8为什么会有这种变动。。sbmojang
      那么,优先级变化为什么会造成最后一个中继器不响应呢?我们举例一个中继器串:

      这是相连的5个中继器接通比较器脉冲时的一个瞬间,我们先来证明一个现象:
      如果相邻两个中继器的优先级相同,那么同gt内一定是前方的中继器先更新。比如图中从左数第2、3个中继器,一定是第3个中继器先更新。
      反证:假设现在是第二个中继器先更新,那么在下1t,此中继器的更新将导致第三个中继器第一个被加入Next Tick Entry(这是smg?详情见http://tieba.baidu.com/p/4078230299,顺便打广告QwQ),从而在下1t第三个中继器先更新。
      好吧这个证明并不怎么严谨2333,知道事实确实是这样就行了。
      我们来排一下这5个中继器的优先级:
      -3、-3、-3、-3、-2.
      从而,在1gt内,更新顺序从左数倒数第二个中继器开始,然后是第三个中继器,一直到第一个中继器:

      这时最后一个中继器才被更新,但是:

      这时它发现自己已经不需要熄灭了,又一个“你玩我”案例2333 @哆啦715 于是,最后一个中继器就会保持常亮,而其他中继器会正常响应。而在1.7中,这5个中继器优先级全部为-2,所以更新顺序依次从右到左,不会有不响应信号的情况。


      IP属地:陕西4楼2015-10-09 13:19
      收起回复
        原因从代码层面解释了 也给出了这种bug的避免方法 我只能说 好评!


        IP属地:上海来自Android客户端6楼2015-10-09 13:48
        收起回复
          渣渣路过


          IP属地:河北来自Android客户端7楼2015-10-09 14:34
          收起回复
            表示这解决方案明显火星好么←_←不过帖子挺不错的,之前我还不知道原因呢


            IP属地:北京来自Android客户端8楼2015-10-09 17:49
            收起回复
              这个脸熟混得好,从此以后谈到优先级理论又要多@ 一个人(手动斜眼)


              IP属地:上海来自手机贴吧9楼2015-10-09 19:01
              收起回复
                感觉新理论还是有些道理的...坐等更完然后出1.9都废掉2333


                IP属地:日本来自Android客户端10楼2015-10-09 19:11
                收起回复
                  (๑•̀ㅂ•́)و✧补一个
                  能不能解释一下比较器链通过短正脉冲⊙▽⊙


                  IP属地:上海来自Android客户端11楼2015-10-09 20:13
                  收起回复
                    GP触


                    IP属地:浙江来自iPhone客户端12楼2015-10-11 06:35
                    回复
                      那么中继器的短脉冲能进比较器吗(虽然好像不实用)


                      13楼2015-11-28 11:00
                      收起回复
                        对于这个时钟,有的中继器会时钟,有的会一直保持激活。。
                        我测试了一下,和位置,朝向无关,放在哪里都是这种结果。


                        我测试了一下,对于平面的摆放,归纳出了被信号为14以上的红石线激活就不会出现时钟这个结论。。但是立体就又是一回事了。求教gp...这应该和优先级毫无关系吧


                        IP属地:北京21楼2016-01-29 12:51
                        收起回复
                          论一眼看成中阻器


                          IP属地:山东来自Android客户端22楼2016-10-02 19:02
                          回复
                            好贴~顶起


                            IP属地:广东23楼2016-10-02 19:40
                            回复