Minecraft(我的世界)中文论坛

标题: [CBL∫2b]指令方块进阶教程——模块 §α : (序)高频与超频执行顺序 [打印本页]

作者: ⭐✔️    时间: 2015-6-26 22:24
标题: [CBL∫2b]指令方块进阶教程——模块 §α : (序)高频与超频执行顺序
本帖最后由 贰逼 于 2015-11-11 19:20 编辑

(序)高频与超频

下一页为 创建方式

正式学习模块前,先了解指令方块驱动核心——高频(与超频)的顺序。*(1.9版本请使用repeat自更新命令方块或者链接chain链式命令方块作为核心,不需要fill clock。如果使用自更新方块,只需要注意依次放置;如果使用链式方块,只需要注意链接的先后。)

模块基础将会涉及到

红石高频

指令方块超频

§α.0 作用

        α.0.1 为什么要使用高频
大家都知道指令方块被激活才能完成事件


只有受到了红石信号后指令方块才有输出,

然而为了完成指令方块的自动化,不可能手动完成激活信号,所以必须需要高频。
即使是单次完成的指令,也需要激活,所以仍旧需要判断条件,依旧需要高频。
以高频在无论是逻辑组中还是模块中占有十分重要的地位


所以高频就是每次提供一次红石信号,完成指令方块的刷新,从而得到自动化的执行

可以这么说,没有高频不可能得到现在的指令方块。


        α.0.1 高频分类
高频在此处分为两类,一种是红石高频,一种是指令方块超频,分别是逻辑组模块的核心。


                α.0.1.1 红石高频

逻辑组中常见的有以下几个:


红石高频显著的特点就是红石布线,从而激活方块。

执行效率一般,但是为逻辑组提供了优点,
因为高频可控,所以能轻易的通过setblock指令控制
也因为速度较慢,所以能驾驭一些复杂的逻辑指令组,甚至控制逻辑电路
所以成为了逻辑组的核心

其他的高频可上网查找,不做较多说明。

                0.α.1.2 红石高频



指令方块超频显著的特点就是块输出,从而激活方块。

执行效率很高,所以成为了模块的核心
因为其执行效率,所以能够基本即时完成输出
但是弊端在于不能驾驭复杂逻辑指令,所以才有后来的一系列近乎模拟编程的教程。

尽管有利有弊,但仍然成为了国外主流。


其他高频可上网查找,不做较多说明。



全索引链接
上一篇(计分板操作)--下一篇(序) 模块概念)

§α.1 创建
下一页为 执行顺序

      α.1.1 红石高频

这是红石玩家的数值内容,不做详细解释.
可自行查找,本帖只会介绍中继器类布线类

      α.1.2 指令方块高频

                α.1.2.1 FallingSand法
此方法具体教程:
http://www.mcbbs.net/thread-209421-1-1.html



/summon FallingSand ~ ~1 ~ {Tile:152}
通过激活上述指令,在得到的红石块附近的红石都会得到红石脉冲。

这是因为summon后的红石块会再次激活指令,所以达到超频的效果。

                α.1.2.2 Setblock法



上方指令方块:
/setblock ~ ~-1 ~ redstone_block
下方指令方块:
/setblock ~ ~1 ~ air
在两个指令方块中间放置红石块,同时激活。

由于执行顺序,所以会先执行下面的,而指令判定放置的时间比执行上面的慢,
所以在放置空气时又在判定放置红石块,于是形成了超频。

                α.1.2.3 fill法
fill法输出全是红石块,所以都为信号源



上:
/fill ~(最后坐标与现坐标的差) ~-1 ~(最后坐标与现坐标的差)~ ~-1 ~ redstone_block
下:
/fill ~(最后坐标与现坐标的差) ~1 ~(最后坐标与现坐标的差)air

最后坐标与现坐标的差
fill区域相对的角落的坐标 减去 这两个指令方块中间的坐标 得到的x轴和z轴的差。(y轴为固定)
差为0是直线,为其他数值则是一个区域。

例如
这两个指令方块中间的坐标 为:0 1 0
fill区域相对的角落的坐标 为:-2 1 10
则x轴差为-2,z轴差为10
指令就是:
/fill ~-1 ~-1 ~10~ ~-1 ~ redstone_block
/fill ~-1 ~1 ~10~ ~1 ~ air

因为fill是一个区域性的操作,而上面只是水平区域,但也可垂直,这里不做解释。

与setblock相同原理,只不过将红石改成了红石块,而且输出顺序更有条理。

缺点:fill法的区域块会被动执行,无法破坏,被强制固定了。

                α.1.2.4 fill/replace法
为fill演深版,继承了fill法优点



上:
/fill ~(最后坐标与现坐标的差) ~-1 ~(最后坐标与现坐标的差)~ ~-1 ~ redstone_block 0 replace 方块名 (附加值,默认0)
下:
/fill ~(最后坐标与现坐标的差) ~1 ~(最后坐标与现坐标的差)方块名 (附加值,默认0) replace redstone_block 0

最后坐标与现坐标的差
fill区域相对的角落的坐标 减去 这两个指令方块中间的坐标 得到的x轴和z轴的差。(y轴为固定)
差为0是直线,为其他数值则是一个区域。
方块名可以为任何不是红石块的方块名,附加值随意,前提有这个方块

例如
这两个指令方块中间的坐标 为:0 1 0
fill区域相对的角落的坐标 为:-2 1 10
方块名 为:wool
附加值 为:8
则x轴差为-2,z轴差为10,
指令就是:

/fill ~-1 ~-1 ~10~ ~-1 ~ redstone_block 0 replace wool 8
/fill ~-1 ~1 ~10~ ~1 ~ wool 8 replace redstone_block 0

优点:与fill一样,但是由于replace所以降低了效率,但可以直接手动添加/减少红石块超频(不会锁住)
这里要说明,此处不同fill的范围是一个块全部被动执行,这里是一个范围,(这个范围可以非常大)
只要在这个范围内的红石块自动成为超频核心



综合推荐fill法(最普遍的方式);
若需要可控制的,则推荐fill/replace法.



附加部分
练习:


§α.2 执行顺序

      α.2.1 执行顺序概念

对于任何红石机械来说都有着先后顺序不可能同时执行


说明了机械始终存在顺序↑

本章将探究顺序先后的条件与关系


      α.2.1 执行顺序作用
执行顺序作用在于执行一个事件的前后

举一个简单的例子,
倘若
事件1:b=a;
事件2:在文本框中输出b的值。

若先执行 事件1,再 事件2,
因为输出b的值,而在此之前b=a,所以输出了a的值

若先执行 事件2,再 事件1,
因为先输出b的值,而b=a在此之后,所以输出的只是b的值

所以执行顺序无论在逻辑组和模块中都有重要作用




      α.2.2 红石高频中的执行顺序
               我不想说了,大家心里明白
                α.2.2.1 延迟顺序



延迟顺序比较简单,就是按照延迟的方向执行,
最先执行脉冲刚刚开始时的前端最后执行脉冲最后到达的末端

比如脉冲在1 2 3 4处以下列顺序顺序产生信号:
1→2→3→4

那么高频执行的顺序就是
1→2→3→4  →1→2→3→4  →1→2→3→4  →1→2→3→4


      α.2.3 指令方块超频中的执行顺序
                α.2.3.1 布线顺序





两种方式均使用红石高频中的布线顺序

                α.2.3.2 块顺序
所谓的块顺序就是整个fill超频中区域中的执行的顺序。

因为红石块为信号源,所以信号顺序相同,此时就需要微延迟来作为顺序了。





由上面两图可以得知↑

若信号相同
那么执行顺序则是:
x- x+ y- y+ z- z+

所以对于常见的线型布局:



可以像上图一样布局↑


也可以按照如此排列↑

两种布局顺序都是一样的。


      α.2.4 标准顺序
                α.2.4.1 布线
不做讲解

                α.2.4.2 延迟
按照脉冲前端至末端顺序依次执行。

                α.2.4.3 同信号同延迟
微延迟:
按照:
x- x+ y- y+ z- z+
顺序执行。






[groupid=546]Command Block Logic[/groupid]
作者: ⭐✔️    时间: 2015-6-26 22:26
希腊字母表达意思是序章顺序。
由于时间与读者需要
将会核心部分和基础部分一起更新

http://www.mcbbs.net/forum.php?m ... 387&pid=8388575中提到。

特别@jianghr
http://www.mcbbs.net/forum.php?m ... 387&pid=8388604
作者: lzs1234    时间: 2015-6-26 23:04
本帖最后由 lzs1234 于 2015-6-26 23:05 编辑

顶2B,开始写造福人类的新手教程了!(准备重新学基础…)

作者: chyx    时间: 2015-6-26 23:25
单刻比较器减法脉冲不能离的太近啊 一会红石er看见怎么想啊
作者: chyx    时间: 2015-6-26 23:27
单线型的红石会直接按照信号强度(由强到弱)顺序执行↑

什么鬼啊 完全无规律的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: chyx    时间: 2015-6-26 23:31
(3连)
这段话想说好久了 mcbbs在这里不知为何在某些方面不好 (不是说论坛不好) 包括某些艺术家/版主表示出生点只加载出生点所在区块 红石激活顺序按强度 比较器高频太近执行不了是BUG。。。 不能仔细设计对照实验 人云亦云 希望能够加强和外界的交流 比如和贴吧 国外。。。
作者: 乙烯_中国    时间: 2015-6-26 23:55
chyx 发表于 2015-6-26 23:31
(3连)
这段话想说好久了 mcbbs在这里不知为何在某些方面不好 (不是说论坛不好) 包括某些艺术家/版主表 ...

嘛。。。强度的确可以是一个大概的依据,不过实际上还是按照地图来随机的,不清楚2b是怎么得出这个结论的。
作者: chyx    时间: 2015-6-27 00:18
乙烯_中国 发表于 2015-6-26 23:55
嘛。。。强度的确可以是一个大概的依据,不过实际上还是按照地图来随机的,不清楚2b是怎么得出这个结论的 ...

主要是不能透过现象看本质 不能多次试验 不能设计对照
作者: 海滩上    时间: 2015-6-27 07:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: chyx    时间: 2015-6-27 08:41
chyx 发表于 2015-6-27 00:18
主要是不能透过现象看本质 不能多次试验 不能设计对照

fallingsand时钟1.8要改成0.5
得说下原理 Time:0的沙子实体会检查下他的id和他所在的方块id一不一样 一样就把所在位置设成空气 不一样就自杀 因为正常游戏中 沙子方块受更新时检查下面的方块能否承载他 否就在他自己位置“summon”一个Fallingsand 然后就不管了 把沙子方块清除是沙子实体干的
作者: ⭐✔️    时间: 2015-6-27 13:15
chyx 发表于 2015-6-27 08:41
fallingsand时钟1.8要改成0.5
得说下原理 Time:0的沙子实体会检查下他的id和他所在的方块id一不一样 一 ...

要这样说私聊
这篇帖子就这样回复了五次
作者: jianghr    时间: 2015-6-27 16:28
我在1.8pre时试图制作复杂运算,为削减运行时间曾试图用多指令并行运行,类似是单setblock+引线输出,也就是对应你所说的2.2.1 布线顺序 。但是指令始终是固定顺序的诡异排列,说明其充能顺序决计不是你说的信号强度那么简单,比如离源空开一格、让红石块接近命令方块、红石块悬在线上、红石线高低差都会影响实验结果。我刚在1.8.4(无forge纯端)下测试结果依旧如此,还请核对。
然后,高频只是激活模块的一种手段,好比编程时写一个函数,你可以用循环反复调用,但是不代表所有的函数都一定要挂在循环下面。就打个比方递归算法,本体函数尽管被反复执行,但可不是挂在循环下的。
你说“即使是单次完成的指令,也需要激活,所以仍旧需要判断条件,依旧需要高频”,但在我看来,“判断条件”只是制作事件响应的一部分,事件响应应该单独作为一个模块挂在高频下,这个我是不反对的。后续的指令作为其他模块根据事件响应的返回值选择运行。
作者: 爱心魔王FHC    时间: 2015-6-27 17:47
话说命令方块高频呢……
作者: ⭐✔️    时间: 2015-6-27 18:19
jianghr 发表于 2015-6-27 16:28
我在1.8pre时试图制作复杂运算,为削减运行时间曾试图用多指令并行运行,类似是单setblock+引线输出,也就 ...

那一段我就删了,更多人更有经验
我并没有提到所有的所有绝对要使用高频,
但是模块主要应用在跨地图的应用上,所以不得不将所有指令整合应用在一条高频,

如果说逻辑组是文件夹,模块就是打的一个压缩包。


其他的结构什么的以后都会讲,不必在如此早拿出来,

作者: jianghr    时间: 2015-6-27 18:25
贰逼 发表于 2015-6-27 18:19
那一段我就删了,更多人更有经验
我并没有提到所有的所有绝对要使用高频,
但是模块主要应用在跨地图的应 ...

那我们对模块的定义是不一样的。我对模块的定义大致属于函数或过程的定义。
你的么……或许更接近于成品,类似于封装的驱动。
作者: ⭐✔️    时间: 2015-6-27 18:33
jianghr 发表于 2015-6-27 18:25
那我们对模块的定义是不一样的。我对模块的定义大致属于函数或过程的定义。
你的么……或许更接近于成品 ...

然而模块被佬外开发出来的目的确实是类似于封装驱动
而我在其中添加了模拟程序也只是附加内容
作者: chyx    时间: 2015-6-27 19:33
jianghr 发表于 2015-6-27 16:28
我在1.8pre时试图制作复杂运算,为削减运行时间曾试图用多指令并行运行,类似是单setblock+引线输出,也就 ...

我问过卖可乐 他说红石的激活顺序是源码里的一个迭代算法 使用时可以认为是随机的 但一旦电路确定 顺序就不再变 这顺序会跟版本 位置 形状等有关系 跟时间无关
作者: chyx    时间: 2015-6-27 21:19
jianghr 发表于 2015-6-27 16:28
我在1.8pre时试图制作复杂运算,为削减运行时间曾试图用多指令并行运行,类似是单setblock+引线输出,也就 ...

你怎么看我6L说的情况?
作者: jianghr    时间: 2015-6-27 21:44
chyx 发表于 2015-6-27 21:19
你怎么看我6L说的情况?

关于这些话题我应该没发表过评论,但是红石执行顺序我是研究过的,最早的模型就是双活塞对撸,那时的结论就是固定的未知激活次序,猜测可能与朝向/chunk等有关,在CB序列执行过程中我又遇到了同样的问题,我测试了红石线激活顺序,但仍然未能得到统一的结论,于是没有继续研究下去。
比较器高频激活失败什么的我不是很明白说的是什么情况,但以前我研究过活塞发动机时接触过更短的闪烁,以至于能亮红石线但不能激活活塞。   出生点区块加载什么的我也没专门研究过,只在压缩你的区块加载器时测试过几次,只测试了世界生成区块和setworldspwan区块不会卸载,具体范围没测量。
然后,知道论坛能编辑为什么还要3连作死?
作者: chyx    时间: 2015-6-27 21:51
jianghr 发表于 2015-6-27 21:44
关于这些话题我应该没发表过评论,但是红石执行顺序我是研究过的,最早的模型就是双活塞对撸,那时的结论 ...

比较器那个是指只要分析高频成因就知道离比较器最近的两格红石线是强度一直不为0的 但某艺术家曾说前两格不能高频是游戏的BUG。。。而且出生点区块加载至少知道是一块不小的区域 绝不是1*1



经亲自试验 出生点常载区块为16*16 中心为离出生点最近的那个区块的顶点
当有两个离出生点最近的那个区块的顶点存在时是17*16 这时站在出生点上按F3看chunk一项是8(我知道你知道我在说哪个数)
如果是正中间时就是17*17

作者: jianghr    时间: 2015-6-27 23:09
chyx 发表于 2015-6-27 21:51
比较器那个是指只要分析高频成因就知道离比较器最近的两格红石线是强度一直不为0的 但某艺术家曾说前两格 ...

我翻译的spwan条目中确实有类似17*17的说法,好像是17*17内的mob参与到人口计数,但是出生点常载区块真有真么多?16*16=256,但是大家伙都要保证人在中间待区块加载完毕才能正常运行,但是它们很少能有做到256见方的,出生点常载区块如果真有那么大那很多作品就不会受到区块加载的限制了。
比较器那个我好像从未直接用过前两格回折的,因此没研究过。不过这些已经和本主题关系不大了,可以以其他方式讨论。
作者: 白天    时间: 2015-12-3 18:43
很有用的帖子QwQ 我也来学习学习二逼大大的研究成果(?>ω<*?)
貌似有个图片上面的/say 1写成了/sav 1没人看到吗233
作者: ⭐✔️    时间: 2015-12-3 19:55
白天 发表于 2015-12-3 18:43
很有用的帖子QwQ 我也来学习学习二逼大大的研究成果(?>ω

那个是画图的错误




欢迎光临 Minecraft(我的世界)中文论坛 (https://www.mcbbs.net/) Powered by Discuz! X3.5