这些区块还有救吗?有救,只需要在下一次卸载之前,漏斗能提前加载那些区块,就可以将那个区块从卸载表上扯下来,让区块继续运作。
那么,我们就可以选择哈希表靠后的区块,我们就有机会它一直被漏斗加载。
没错,但是你该怎么知道哪个区块在哈希表靠后的地方?
其实哈希表的排序并不是随机的,而是有规律的。哈希表并不是单纯的一个表格,它是由哈希键索引的各种桶组合在一起的。而每一个区块的哈希键,由这个区块的X和Z来决定。也就是说,每个区块的卸载顺序,由这个区块的X和Z来决定。(注:一个区块的XZ为这个区块的中心位置,即在F3调试界面区块坐标XZ都为8的地方。
那么该怎么计算?
我们以世界原点(0,0)举个例子。
首先,游戏会将世界原点的X和Z轴转换成2进制,然后组合在一起,变成一个长8字节的2进制数字。而每个字节由8个2进制数字组成,所以这个8字节的二进制数字,就长达64个位数。即:
0000000000000000000000000000000000000000000000000000000000000000
(实际上这就是典型的64位,即64个位数,这下子你应该知道了这个64和32位操作系统的区别了吧)
然后游戏就会把这串数字交给JAVA处理。JAVA首先会把这个数字分成两半,即:
00000000000000000000000000000000-00000000000000000000000000000000
(这其实有些像我们以前讲过的UUID)
接着JAVA会把这串分成两半的数字左边跟右边做一次异或运算(即上面和下面的数字相同,输出0,不同,输出1),也就是:
00000000000000000000000000000000
00000000000000000000000000000000
得出来的结果是32位数:
00000000000000000000000000000000
你以为这就完了吗?其实还没完,JAVA会再把这串数字分两半,再异或,即:
0000000000000000-0000000000000000(32位)
—异或—
0000000000000000(16位)
然后把这个16位的二进制数字转化成10进制,即:0。
这就代表着这个区块的卸载顺序为0。
现在我们换一个坐标,换(3,3)吧:
3-3(10进制)
—转2进制—
00000000000000000000000000000011-00000000000000000000000000000011
—异或—
0000000000000000-0000000000000000
—异或—
0000000000000000
—转10进制—
0
3,3坐标竟然还是0。
所以我们可以得出一个结论:由于对角线的坐标X和Z的数字相同,导致异或后肯定为0,所以对角线的坐标在哈希表里的排序肯定为0。
紧接着,我们就可以通过这个结论,来反推出坐标里有一个数值为0的坐标(比如5,0)排序是最靠后的,数值为0的坐标即正东西南北方向。
而我们还可以通过上面的转化过程知道,转化的最大XZ值不能超过,最小也不能小于-。
但是为了让大家更直观的了解区块加载顺序,作者就去计算了以原点为中心,16×16的区块的公式结果并制成了图片,最终结果可以加一下群看(群相册),不嫌麻烦的话.......
也可以前往这个网址查看:a1.qpic.cn/psc?/V12hBLHP1rg0d7/ruAMsa53pVQWN7FLK88i5uzvbLxLD58OVyNzZou1uUu8F0RYkSv9jxcNhY89sjOb*ocTak2*reWHtk36CouBeWGWoNgPtREr6YPKYgR*ZRY!/b&ek=1&kp=1&pt=0&bo=OAQ4BAAAAAABFzA!&tl=3&vuin=&tm=&sce=60-2-2&rf=viewer_4(注意要加http)
这张图片区块颜色越红,结果数字越小,优先级越高;越白,结果数字越大,优先级越低。
而且如果深入研究,还是有很多规律的:
1.其实不难发现,这张图片只看颜色是对称的,而且上下对称,左右对称。
本小章还未完,请点击下一页继续阅读后面精彩内容!
喜欢Minecraft指令手册请大家收藏:(m.zjsw.org)Minecraft指令手册爪机书屋更新速度全网最快。