植物大战僵尸吧 关注:556,691贴子:5,057,135

【破事水】从冰车地刺开始谈判定

只看楼主收藏回复

如题


IP属地:山西1楼2022-12-08 22:49回复
    首先,有个现象是,冰车碾(被)压(扎)地刺,要比其他植物早一些,大概是这样的:


    IP属地:山西2楼2022-12-08 22:53
    回复
      关于这个问题,我去稍微看了一下代码,得出了下面两个结论:
      (1)冰车无法碾压到地刺和钢地刺
      (2)冰车的爆炸源于地刺和钢地刺的主动攻击
      这就导致冰车和(钢)地刺判定时,用的区域是植物攻击区域&僵尸防御区域,而和其他植物是植物防御区域&僵尸攻击区域。


      IP属地:山西3楼2022-12-08 22:54
      回复
        本以为问题就这么愉快的解决了,但是简单算一下却发现了问题。
        数据如下:
        冰车防御区域:[0,153]
        冰车攻击区域:[10,133]
        一般植物防御区域:[10,70]
        地刺攻击区域:[20,50]
        我们假设植物左侧横坐标为0,冰车左侧横坐标为t,从右侧驶来的,冰车攻击区间和植物防御区间第一次相遇时,有70=t+10,解得t=60.
        而对于地刺呢?50=t,解得t=50.
        所以按照这个解释会先压到地刺,和实际不符。


        IP属地:山西5楼2022-12-08 22:59
        收起回复
          抱着大大的疑惑,我看了一下冰车碾压的代码。
          发现有这样的一行:“cmp eax,0x14"
          0x14=20,这里引入了一个新的数据20.
          经过并不是怎么很努力的阅读我们了解了这个20的含义,我们可以这里理解:
          ①把区间A画到数轴上;
          ②把区间B画到数轴上;
          ③测量一下这两个区间重合区域的大小(如果没有,就是两个区间离得最近的两个点的距离的相反数),拿这个数字和20比较比较,如果比20小,就不碾压了。


          IP属地:山西6楼2022-12-08 23:04
          回复
            换句话来说,我们假设x是两个区间的交集的大小(如果交集为∅,取区间内两点最近距离的相反数),在进行一些判定时,我们需要验证一下x是否足够大(或者足够小,原版没有这样的情况)。


            IP属地:山西7楼2022-12-08 23:07
            回复
              碾压判定需要的值为20,而(钢)地刺攻击为1。
              再拿这个作一些简单的计算:
              对于普通植物,70-(t+10)=20,解得t=40。
              对于(钢)地刺,50-t=1,解得t=49。
              所以(钢)地刺要比普通植物早9s被碾压(其实是扎车)。
              这个数据和实际测得的相吻合,可以认为没问题。


              IP属地:山西8楼2022-12-08 23:11
              收起回复
                当然也别忘了左边界,简单的计算可得:
                普通植物被碾压的条件是:(X车 - X植) ∈ [-132,40]
                而对于地刺,为:(X车 - X刺) ∈ [-132,49]
                这里实际数据测量感谢@reisen


                IP属地:山西9楼2022-12-08 23:15
                回复
                  所以我们成功搞清楚了地刺冰车判定的问题,并且解释了原因。
                  然后我发现貌似目前没有对这个“x"作研究的帖,于是就收集了一下原版的很多"x",来满足强(水)迫(个)症(帖)。
                  (倾荡之势已成,石城尽在眼下)(什么东西)
                  为了方便描述,下文把这个“两个区间的交集的大小(如果交集为∅,取区间内两点最近距离的相反数)”称之为“判定精度"


                  IP属地:山西10楼2022-12-08 23:19
                  收起回复
                    搜索PVZ的植物、僵尸判定区域获取函数,并把一些想到的特殊的专门找了下,顺利得出了一些数据。
                    (圆形如爆炸、磁力菇、锤子、胆小菇不计入,杨桃索敌涉及三角函数,不计入)
                    (说来惭愧,我才知道锤子判定是圆形的……)


                    IP属地:山西11楼2022-12-08 23:21
                    回复
                      植物防御区域的有关判定精度:
                      子弹对植物:9
                      僵尸啃植物:20
                      僵尸碾压植物:20


                      IP属地:山西12楼2022-12-08 23:22
                      收起回复
                        僵尸防御区域的有关判定精度:
                        传送门:46
                        钉耙:0
                        小推车:1(如果是气球僵尸,改为20)
                        植物AOE攻击:1
                        窝瓜攻击:1(如果是橄榄球僵尸,改为-19)
                        窝瓜索敌:70(如果是啃食中的僵尸,改为110)
                        植物索敌:0(如果是啃食中的僵尸,且判定源于已冒出的土豆地雷,改为-30)
                        与土豆地雷闪烁时间有关:-1000(希望我没看错)
                        子弹击中僵尸:0
                        魅惑僵尸索敌:19


                        IP属地:山西13楼2022-12-08 23:23
                        收起回复
                          一些杂七杂八的:
                          子弹经过火炬树桩:10
                          IZ僵尸吃脑:20(气球僵尸 35)


                          IP属地:山西14楼2022-12-08 23:23
                          回复
                            好,完结撒花(没错就这么短)
                            数据均由观察代码得出,可能有我犯蠢导致的数据错误,如果发现了请指出(没错我偷懒没有做实验验证)。
                            (毕竟是想水么)


                            IP属地:山西15楼2022-12-08 23:25
                            回复
                              补个7f


                              IP属地:山西16楼2022-12-08 23:32
                              回复