【从源码分析】为什么说方块和实体的交互永远无法绝对精准
redstone_machinery_communication吧
全部回复
仅看楼主
level 12
闪电小绿 楼主
一楼喂熊,tnt
镇楼
2020年03月31日 06点03分 1
level 12
闪电小绿 楼主
首先是一串数字。
这是每一个炮党都为之颤抖的数字[滑稽]
2020年03月31日 06点03分 2
level 12
闪电小绿 楼主
这数字(0.9800000190734863)是tnt的边长。
你一定很迷惑,为什么它是这样滚键盘的数字[阴险]
事实上,这和麻将的一些很zz的操作有关。
2020年03月31日 06点03分 3
level 12
闪电小绿 楼主
如果我们打开MC的源码,可以发现tnt的边长在代码中的确是“0.98”。我们也没理由相信麻将为了给玩家挖坑,特地滚键盘[滑稽]
所以这是什么问题呢?难道Java出bug了?
不要慌,先默念三遍,Java没bug,Java没bug,Java没bug。
然后,再看一段代码。
2020年03月31日 06点03分 4
level 12
闪电小绿 楼主
这是方块和实体交互的一段代码,乍一看也没问题[滑稽]
等等,这是什么
我们终于找到了问题所在——MC在计算方块和实体的交互的时候,会把float转换成double。
float和double是两种浮点数,单精度和双精度。而它们之间的转换,则会导致那串滚键盘的数字产生。
2020年03月31日 06点03分 5
level 12
闪电小绿 楼主
计算一下,也印证了我的猜想。
2020年03月31日 06点03分 6
level 12
闪电小绿 楼主
又比如说,爆炸的代码。
可以看到所有地方都是拿double来计算的。这也表明tnt的边长在游戏中可以等效为0.9800000190734863,不需要考虑一开始那个浮点数。
2020年03月31日 06点03分 7
level 12
闪电小绿 楼主
再来看看别的
这是tnt创建爆炸的代码,可以看到(this.height/16)是导致高度衰减的元凶。而压爆效应的真正高度,变为了:
而不是简单的0.06125[喷]
2020年03月31日 06点03分 8
level 12
闪电小绿 楼主
当然,在对精度的要求不高的情况下,这个东西的影响不大;然而有些东西要求高精度
比如:珍珠炮[喷]
即使完全校准,珍珠的飞行轨迹还是会有微小的偏移,这就是这个原因导致的。
不仅仅是tnt,包括矿车、珍珠、生物、玩家在内的实体,都有这个问题……
2020年03月31日 06点03分 9
level 12
闪电小绿 楼主
那么最后一点,如何解决这个问题?[阴险]
2020年03月31日 06点03分 10
level 12
闪电小绿 楼主
这里以tnt炮为例:
第一种方法,自暴自弃[滑稽]【划掉】
有些时候不需要极高的精度,那么这样的0.0……01的误差也在接受范围之内。
第二种方法,把所有的tnt都归正到同一个角落。这样即使哪一个tnt都不在方块中心,tnt之间的相对距离还是能精确到1方块边长的。
第三种方法,把两叠含相同数量tnt的tnt堆分别放到方块的两个角落,用对称来打败游戏机制
这时候tnt对于上方的实体的爆炸效果就几乎相当于方块中心的爆炸
2020年03月31日 06点03分 11
level 12
闪电小绿 楼主
当然,tnt是这样,有些实体有着另外一种方法来归正[滑稽]那就是游戏机制
比如,teleport【划掉】
比如这玩意
当你把矿车打掉的时候,猪会出现在旁边方块精确的中心位置上方。没有小数点。
2020年03月31日 07点03分 12
level 12
闪电小绿 楼主
利用这个,可以做出精准的猪炮[滑稽]
朝天上开炮之后,猪飞过几万格高后,可以精确无误地掉到原来的炮管的那格水里面。
图片我就不放了,总之这是一个可行的方法。
=================================此贴完结===================================
2020年03月31日 07点03分 13
猪炮可太秀了[滑稽][大拇指]
2020年04月01日 05点04分
现在我带着精准的人炮回来了[滑稽]https://tieba.baidu.com/p/7365251792
2021年05月22日 16点05分
[haha][滑稽][OK][茶杯]
2021年07月20日 16点07分
level 12
闪电小绿 楼主
我来@一波大佬们
@duoduo_123dong @正正正正正好 @滚大幕
2020年03月31日 07点03分 14
欸,多多没蓝 @无察患者💤
2020年03月31日 07点03分
2020年03月31日 07点03分
2020年03月31日 07点03分
level 11
看不懂,打扰了
2020年03月31日 07点03分 15
[阴险]
2020年03月31日 07点03分
1 2 尾页