P:那么还剩下两个问题,分别是如何在一条平行于X/Z轴的直线上的两个实体间fill方块,其二就是如何判断目标处于第几“象限”,即判断玩家(目标)的X/Z值相对于“坐标原点”(即x=0,z=0)的正负情况,我似乎都想到了解决方案2333。
Q:dafuq?!交(xi)法(wen)不(le)杀(jian)!
P:(满脸黑线的)额,好吧我先说第一种,就是如何在一条平行于X/Z轴的直线上的两个实体间fill方块吧。。。
Q:小pca啊,地里黄啊,二三岁啊。。。。
P:噗噗噗,好吧我来说一下思路,主要就是妙用了叠加法,就是先以第一个目标A为中心向B的方向相向fill 32767格,然后以B为中心同样相向往A这边fill,中间的重叠的部分就自然是A与B之间的部分了。
这边来解释一下,首先举一个不太恰当的例子,这是一张颜色的叠加图

大家可以看到,A,B两个圆中间是有一部分重叠的(记红色的圆为A,黄色的圆为B)那么这里一条直线上的fill就可以理解为两个圆心a,b之间的fill了,如图,尽管B不知道A的圆心在哪里,A也不知道B的圆心在何处,那么A就开始向外扩展,同时B也在向外扩展,在图中形象的表示就是扩展出了一个圆,那么重叠部分就是圆心a到b之间这块了(这种方法也可以用来判断距离,但是太过复杂,便不做介绍)
那么pca其实也是用了类似的方法,让我们把这张图退化成直线形:

图中A和B在一条直线上,首先将B沿A的方向fill(在知道A与B的位置关系以后)也就得到了一条以B为端点的射线,这条射线必经过A(因为A与是在一条直线上,但我仍并不知A的具体位置),然后相似的,也以A为端点,做一条向B的射线,端点也为A,那么中间重叠的部分(可用fill replace)即为A,B之间的距离。