【从源码分析】为什么说方块和实体的交互永远无法绝对精准
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
GT索魂
猪炮可太秀了
2020年04月01日 05点04分
GT索魂
现在我带着精准的人炮回来了
https://tieba.baidu.com/p/7365251792
2021年05月22日 16点05分
闪电小绿
2021年07月20日 16点07分
level 12
闪电小绿
楼主
我来@一波大佬们
@duoduo_123dong
@正正正正正好
@滚大幕
2020年03月31日 07点03分
14
闪电小绿
欸,多多没蓝
@无察患者💤
2020年03月31日 07点03分
闪电小绿
@Dfrend
@末影猪
@ps01017
@AS-Fly
@XJKXZBLAY
2020年03月31日 07点03分
闪电小绿
@enflurane_ri
@TF_813
@小毛
@神罗心灵研究所
@GT索魂
2020年03月31日 07点03分
闪电小绿
@q43-
2020年03月31日 07点03分
level 11
堕落o的风
看不懂,打扰了
2020年03月31日 07点03分
15
闪电小绿
2020年03月31日 07点03分
1
2
尾页