【原版】方块的碰撞区域BUG,及其应用:无线红石,指针检测

1L,请勿插楼,谢谢合作

楼主 defanive2  发布于 2013-01-21 11:53:00 +0800 CST  
方块的碰撞区域BUG存在已久了,但是比较鲜为人知
于是我来科普讲解一下
这个BUG主要较明显地作用在于这3组方块中
第一组:任何材质做成的阶梯
第二组:铁栅栏,玻璃片
第三组:普通箱子,铁砧

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 11:56:00 +0800 CST  
什么是碰撞区域呢?
碰撞区域就是代码用于检测entity与方块碰撞的区域界限
例如左边的铁栅栏,它的碰撞区域就是一个十字型的柱体
当entity尝试穿过这个碰撞区域的界面时,就会被阻挡
再例如右边的栅栏,都成一字形片状(长度不等)

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 11:59:00 +0800 CST  
这个BUG就存在于碰撞区域的处理上
由于这4个都是铁栅栏,有同样的方块ID
但是MC代码并没有把每一个不同铁栅栏的碰撞区域给记录下来
而是把当前“活动”的铁栅栏的碰撞区域作为所有铁栅栏的碰撞区域
我们现在玩家指针指向于这一个铁栅栏,成短一字形
于是所有其他的铁栅栏,包括本应有十字形碰撞区域的左边的铁栅栏
也只有了这一字形的碰撞区域

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:01:00 +0800 CST  
所有方块的碰撞区域都是如此
例如阶梯
玩家指向其中一个阶梯,所有阶梯的碰撞区域都会被这个阶梯的碰撞区域代替
例如指向右边的阶梯,那么左边的阶梯就会只有L型的碰撞区域了

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:04:00 +0800 CST  
箱子也不例外,不过比较难注意
箱子实际上并不占整个方块的大小,而实际上是边长0.875的立方体
当鼠标指向铁块上的箱子时,注意,这个箱子是和右边的箱子相连的
因此这个箱子右侧的碰撞区域实际上延伸到最右侧
因此所有箱子的右侧的碰撞区域都被延伸了

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:07:00 +0800 CST  
如此,利用这个BUG,我们可以设计出特别的装置
这个装置是信号接收器,媒介为铁栅栏
建造方法很简单,如图建就可以了
中继器档位为4tick(满档)
右下方的拉杆为接收器的开关
右上方的红石火把表示是否接受到信号

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:10:00 +0800 CST  
如果理解这个BUG的话,其工作原理非常简单
开启这个信号接收器之后,脉冲会不断让活塞上推铁栅栏
铁栅栏由于现在有十字的碰撞区域,就会把船顶上去
船会碰撞到木质踏板,并激活电路,熄灭火把

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:12:00 +0800 CST  
而信号发射器则非常简单,如图的铁栅栏即可
当玩家把指针指向其中一个铁栅栏的时候
其碰撞区域,一字形(注意这个一字形的朝向)
就会代替所有铁栅栏的碰撞区域,包括活塞上的那个铁栅栏
因此活塞上的铁栅栏只有一字形的碰撞区域了
就无法再把船上推,也无法触发踏板
因此红石火把就亮起

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:15:00 +0800 CST  
信号发射器(铁栅栏)和接收器(活塞装置)之间距离可任意调节
只要接收器的铁栅栏仍然在内存中
那么就可以正常接收信号发射器的信号
这也就实现了无线红石
只不过信号发射器需要玩家指向才能发射信号
PS 后面会介绍红石电路可控的信号发射器

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:17:00 +0800 CST  
上面使用的媒介是铁栅栏(同组的有玻璃片)
也可以使用阶梯作为媒介
使用阶梯作为媒介,原理也类似
当玩家指向信号发射器(右)时,左边的阶梯的碰撞区域就会被取代成L型
进而无法继续把船抬到足够激发踏板的高度
注意,如果要使用阶梯作为媒介,阶梯需要有特定朝向
只有2种朝向可用,其中一种是SOUTH(或f=0)

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:22:00 +0800 CST  
接下来介绍这种装置,利用箱子(或者同组的铁砧)作为媒介
建造方法非常简单,一个环形轨道
倾斜的4个铁轨中,3个铁轨是加速铁轨,方块下方的是压力轨
加速铁轨全部被充能
压力轨上方放一个方块,并且放上媒介箱子(或者铁砧)
压力轨的输出信号就是接受到的信号

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:25:00 +0800 CST  
而信号接收器很简单,则是如图形成的大箱子的右侧的箱子
当玩家指向右侧的箱子(铁块上)的时候,矿车就会移动,信号被接受
原理同样是这个右侧的箱子的碰撞区域取代了信号接收装置上的箱子的碰撞区域
但是为什么矿车会移动呢?
矿车初始时是卡在了普通箱子的碰撞区域的左平面
普通箱子的碰撞区域的左平面与矿车进行碰撞
因此矿车无法通过
而当指针指向铁块上的箱子的时候,碰撞区域的左平面被左移了
因此矿车实际上已经穿过了左平面,进入了碰撞区域内部
由于矿车实际在碰撞区域内部,所以就不再进行碰撞判断
就顺利的穿过了箱子,触发了下面的压力轨

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:30:00 +0800 CST  
同样的装置也可以用铁砧实现
这里注意铁砧的朝向
只有这样的朝向,指向信号发射器时,信号接收器的铁砧的碰撞区域的左平面才会左移
但是不推荐使用铁砧作为媒介
铁砧经常会时不时更新自己的碰撞区域
导致接收器无故接受到信号
建议使用箱子作为这类装置的媒介

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:32:00 +0800 CST  
这个BUG的应用之一就是无线红石
之前说到了需要玩家触发信号发射器的无线红石
而在这里的信号发射器(右)可被红石控制
因此可以做到真正的无线红石
左侧的信号接收器就是利用铁栅栏作为媒介的信号接收器

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:35:00 +0800 CST  
信号发射器非常简单,如图设置即可
当活塞被激活时,信号发出
建造很简单,不过要注意的是其朝向与信号接收器的朝向
而且需要注意矿车下并没有铁轨
可以先建好铁轨,放上列车之后把铁轨破坏掉

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:38:00 +0800 CST  
工作原理在于,铁栅栏和玻璃,是唯一一组entity碰撞时会更新碰撞区域
当信号发射器的活塞推出时,铁栅栏吸附到了左侧的铁块
形成了一个一字形的碰撞区域
而由于撞击到了矿车,因此更新了碰撞区域,全部铁栅栏的碰撞区域都变成了一字形
由此,左侧的信号接收器就失去了十字形的碰撞区域
无法再把船上推,也无法激发踏板,红石火把亮起

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:40:00 +0800 CST  
除了无线红石以外,还有另外一个用途就是指针检测
以上的任何一种装置都可以用作指针检测
当指针指向媒介的时候,导致激发了信号接收器
在这里演示的是一个箱子作为媒介的陷阱
PS 外墙拆除,方便大家观察

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:42:00 +0800 CST  
当玩家进入这条长廊,指针指向了箱子
那么箱子就会发射出信号,信号接收器接收到信号
活塞收回,玩家掉入了岩浆陷阱

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:44:00 +0800 CST  
而被坑的人完全无法察觉陷阱
没有任何绊线或踏板
而且陷阱反应时间非常快,几乎是指针移上去的瞬间就会做出反应

——来自 MCLive


楼主 defanive2  发布于 2013-01-21 12:46:00 +0800 CST  

楼主:defanive2

字数:2823

发表时间:2013-01-21 19:53:00 +0800 CST

更新时间:2016-03-15 11:28:48 +0800 CST

评论数:448条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看