8-09 756 views
视频链接:https://www.bilibili.com/video/av12938881/
使用tnt来让沙子飞到沙门上方的方法来源于http://www.bilibili.com/video/av10503725/
整个门的核心原理就是炸沙+弹沙。
原理简单实现起来却有不少的麻烦 原因之一就是某个沙实体卡进方块的bug。
在沙实体受到推力后 它会在推力方向上移动一段距离 若撞上方块则会停下。
以上是人们通常所认为的。(包括无敌的小天使GP)
然而在我实际建造这个门时发现沙子在被推或炸后会卡进方块0.01米,具体危害体现在沙子从栅栏上滑下去时、被tnt炸上天等的时候会变成物品。
这只是大致的情况
反正这个门也没什么好讲的,那我就讲讲这个bug吧
之前提到卡进方块0.01米,然后会因为沙子的某些动作变成掉落物
这其实还有一些特殊条件(不考虑环境,只考虑沙实体本身)
1)沙实体坐标0.01米偏差的方向,也可以说是偏差后再次受到推动的方向
假设沙实体在x轴上偏差 然后受到了z方向的推动 这时候就会在某些情况下(如从栅栏上滑下去时、被tnt炸上天等)变成掉落物。但是再次在x轴上受到推动则不会有问题,但是也不能通过正反方向对推来消除卡进方块的bug。
2)沙实体偏差后的时间
时间计算并不是被推动就开始的,而是撞上墙壁才开始计算的,这段时间很长,但是也不是没有可能对机器造成影响。如果让这样一个沙实体放在一个机器里,那么基本上可以等着机器里的沙实体消失变成物品了(除非你有给它+1s的仙术)
令人高兴的是,面对这样的bug,我还是找到了解决的方法:
在沙实体下落到可以让它变成方块的方块上时,它会忽略自己的坐标偏差,应该是采取四舍五入的形式来选择一个方块来落脚。在这个行为中,沙实体的坐标偏差就被修正了。由于并没有偏很多,沙实体还是能在正确的位置变成方块。
这是我所采取的其中一个办法。沙实体落在方块上,坐标被整理,在需要弹出沙子时活塞收回,沙子落下后伸出
对于处于井中的tnt,我采取了让活塞上推然后收回的方法来整理沙实体的坐标的方法。可能由于上推行为的特殊性,沙实体没有时间限制。无论处于偏差状态多久后上推都不会变成物品,但是tnt的爆炸还是会对偏差后的沙实体有影响,所以要再次整理坐标。
由于tnt提供的推力有限, 这就给门上方的空间提出了要求。这是用线+观察者的方式所制作的与下方坐标整理器原理基本相同的坐标整理+沙实体弹出一体机。因为炮井较为密集并且推进tnt较多,各个沙实体飞行速度不同,要每个单元独立检测沙实体,即使撞上顶部方块后下落速度仍然有不同,我还是在机器里使用了一致的延时,因此有时候因为渲染问题某些沙子就像瞬移了一样。也正是这个炮井较为密集并且推进tnt较多的原因,即使经过下方一段炮管对沙实体坐标的一定限制,在不连续的炮管中运动的沙实体由于卡进方块的bug极有可能撞上上方的炮管而落下,所以我就直接去掉了上方的炮管来使这个问题发生的几率减到最小。
本来说讲讲bug,现在重要的东西都讲了一下233333
这个门的核心就是弹沙+炸沙,希望这个东西能给大触们带来新的坑。
版权属于: Redstone Machinery Communication
原文地址: http://www.rmcteam.org/machinery-circiut/piston-door/60x60_new_sand_door.html
转载时必须以链接形式注明原始出处及本声明。