redstone_machine...吧 关注:3,606贴子:60,861

[水]BE树苗的催熟原理

只看楼主收藏回复

其实也不知道放在这里算不算跑题?
最近的BE树场又有死灰复燃的趋势,但是BE的树苗生长原理和JE的并不完全一样,而BE又似乎没有详细描述催熟原理的文章,这让研究BE树场的许多人为之困扰。
毕竟以前做过一点实验,所以打算开一贴瞎扯扯,大概没什么营养而且内容会很乱,所以有兴趣的将就看看就行了,更主要的还是抛砖引玉,欢迎各位大佬补充~


IP属地:广东1楼2019-01-27 22:54回复
    woc我上世纪关注的大佬更新了


    IP属地:湖北来自Android客户端2楼2019-01-27 22:58
    收起回复
      加油


      IP属地:湖北来自Android客户端3楼2019-01-27 22:58
      回复
        先说说关于树苗的常识。每种树苗都有两个生长阶段。当我们放下一棵树苗,它以一个名为sapling的方块存在地图里,外观和数据值因树种而异,此时就处于第一个生长阶段。处于第一生长阶段的树苗可以通过生长进入第二个生长阶段;同样,处于第二生长阶段的树苗可以通过生长变成树。生长是一瞬间内发生的事,无外观变化,但有数据值的变化。(数据值在原来的基础上+8)


        IP属地:广东4楼2019-01-27 23:09
        回复
          路过
          说起来最近有个坑要填是什么来着忘了


          IP属地:新疆来自Android客户端5楼2019-01-27 23:14
          回复
            生长是一种概率事件,进行生长尝试并不代表生长成功。
            催熟是一种强制进行生长尝试的过程,所以我们要讨论的也就是这样一个生长尝试的过程。接下来打算先讲1×1树的催熟过程,再讲形态。然后。。就是一些乱七八糟的应用了。2×2树因为没有试过,所以暂时先放一下,以后再补充(立flag)


            IP属地:广东6楼2019-01-27 23:34
            回复
              树苗被随机刻(randomtick)抽中,或被生存模式中的人催熟,或被发射器催熟,都会进行一次生长尝试。每次生长尝试,树苗有0.45的概率可以生长。
              第一阶段的树苗的生长不会检测周围的任何方块,只是简单的把数据值+8,进入第二个阶段。这个过程也不会引起方块更新,所以无法被毒察检测到。
              而第二阶段的生长就比较复杂。下面用发射器举例,当然另外几种方法基本没区别。假设有一棵已经在第二阶段的树苗,有一个装了骨粉的发射器对着它。发生器接收到一个来自时钟电路的信号,那么4gt后,将会消耗一个骨粉,进行生长尝试。


              IP属地:广东7楼2019-01-28 00:40
              收起回复
                明天继续更


                IP属地:广东8楼2019-01-28 00:40
                回复
                  顶顶顶


                  来自Android客户端9楼2019-01-28 10:26
                  回复
                    linlindalao复活辣


                    IP属地:广东10楼2019-01-28 14:27
                    回复
                      先吐槽一句。。看了看昨天发的,想到哪打到哪的真的好乱。。不过个人能力有限也就这样了。。
                      今天讲一下生长判定的范围。


                      IP属地:广东11楼2019-01-28 22:04
                      收起回复
                        所有的树生长判定第一步都是随机选择一个高度,这个高度决定主干的高度,更影响对生长范围的判定。值得注意到是,生长范围并不是长成树之后的样子所需要的空间;主干高度也不是长成树以后的树干高度(我今天上午才注意到qwq)。
                        接下来按树种讨论生长范围,顺便穿插一些树干形态。


                        IP属地:广东12楼2019-01-28 22:29
                        收起回复
                          首先讲大橡树。大橡树并不是长得高才是大橡树,根本的区分在于树的形态,最简单的区分方法是看这棵橡树有没有球状的树叶。每颗橡树树苗有1/10的概率会被尝试生长为大橡树。
                          在1*1的树中,从生长的判定角度来看其实最独特的就是大橡树。
                          大橡树的判定区域受生长空间的影响。(这很特别!)(个人理解)
                          如果一棵橡树苗上方只有4格空气,那么它的主干高度也只能是4,而生长判定范围就是树苗上方所有空气,一个竖直条状区域。相较于其它树的判定区域,这是所有的树里最小的。所以那种单片橡树树场一般都是用这种树。
                          但是这种树的催熟率极低,往往是成组的骨粉砸下去都长不出一棵树。

                          如果一棵橡树苗上方有5-7格空气,那么它的主干高度为空气格数-1,就是4或5;生长判定区域同样为树苗上方所有空气,同样是一个竖直的条形区域。
                          如果一棵橡树苗上方有8-15格的空气,那么主干高度就不一定了,最高为空气格数-2,就是在5-13之间。生长判定区域为主干以及主干上方三格空气,还是一个竖直的条形区域。总而言之大橡树的判定区域和体型完全不同,非常小,无论多高都是竖直条状的区域。与普通橡树的判定区域(后面会提到)对比后不难发现很容易让橡树只能长成大橡树。此外,这种还很有可能会生长出侧枝。侧枝的明显标志就是,所有的木头都是横着的。
                          许多人对侧枝的生长范围存在误区或完全一无所知(因为这不重要,几乎就没有利用大橡树侧枝的树场)。我用cb粗略记录了侧枝的生长范围,截图放在下面。侧枝的生长范围大致上成一个热气球型,俯视为圆形,但是并不以主干对称,而是向x z轴正方向各偏移了+1格。



                          IP属地:广东13楼2019-01-29 00:01
                          收起回复
                            然后是普通橡树,云杉,白桦,丛林树这几种树,也就是1*1树场最常用的几种树种。接下来的内容是最关键的部分。
                            对这几种树来说,主干高度就是长出来后的树干高度(关于云杉我会进一步解释)。这几种树的主干高度如下:
                            数据值 树种 高度
                            0 橡树 4,5,6
                            1 云杉 6,7,8,9
                            2 白桦 5,6,7
                            3 丛林 5,6,7
                            值得注意的是,相比je,丛林树不再是最高的树了。
                            判定部分应该和je区别不大。(毕竟be没有源码,这里大部分都是经验之谈)
                            如果一棵树苗要生长成一棵树,游戏会首先在[0,1)的范围内随机抽取一个double类型的数,如果这个数小于0.45,那么这一次生长尝试成功,并开始判定是否可以生长。简单来说就是每次催熟有0.45的概率树苗会开始判定。
                            这四种树判定的范围同je中的白桦。(be的云杉没有那么娇贵了)
                            对不同的树,游戏会在上表列出的高度里等概率的先随机选择一个高度,然后判定下图中所有玻璃和木头的区域内是否存在除了空气(air),泥土(dirt),树叶(leaves、leaves2)以外的任何方块。如果有,那么生长判定结束,树苗无法生长,并且树苗回退到第一个生长阶段(数据值-8)。我不清楚je是否存在回退现象,但似乎从来没有听过有人提到这一点。。但至少在be中,这种蜜汁回退真的很恶心。

                            图中只是一个7高白桦的例子,对不同高度的树来说判定区域略有不同,但都长成这样的蘑菇状(鸡腿菇?)。这个不同只是白色区域的高度而已。
                            我个人习惯性把图中灰色称为5*5范围,这个范围的具体大小用cb中坐标形式描述为:以最上方的主干为中心~-2 ~ ~-2 ~2 ~2 ~2,也就是一个5*5*3的正四棱柱。
                            图中白色区域我一般叫3*3范围,就是从第二格主干起到倒数第二格主干的所有木头的水平方向3*3的范围,也就是3*3*n的正四棱柱。
                            之所以这样区分3*3和5*5一是好记,二是为了方便设计时的理解。


                            IP属地:广东14楼2019-01-29 00:59
                            收起回复
                              明天再更死树,树干的生成与树叶的阉割。还有空就更合欢。
                              现在好像有点不只是在说催熟了,还把树本身的性质加进去了。
                              干脆就把树场的设计过程也顺便说了吧(flag*2),再加一些推论及其推导过程,以及一些常用的架构,技巧······感觉是个大坑边组织语言边打打字速度慢,希望一个星期以内可以更完。


                              IP属地:广东15楼2019-01-29 01:11
                              回复