植物大战僵尸吧 关注:536,355贴子:4,927,735

PVZ15周年快乐,聊聊G式真和平的原理

只看楼主收藏回复

如题


IP属地:河北来自Android客户端1楼2024-05-05 14:11回复
    作为一个一直整同人的,15周年做一个原版向的内容感觉挺奇妙的。
    但是这个阵造都造了,解释下原理也是必要的。


    IP属地:河北来自Android客户端2楼2024-05-05 14:12
    回复
      先说明三个游戏的基础概念:
      ① 僵尸上限:原版僵尸有最多数量(上限我记得是1023),到达最多数量后创建僵尸会返回0(大概是nullptr),而原版只有选卡处会假定结果不是nullptr
      ② 动画上限:如植物的动画,僵尸的动画这类叫做动画,上限为1024。溢出会崩溃。
      ③ 绘制对象上限:如背景层,种植预览,植物,僵尸,植物影子,僵尸影子等都是绘制对象,上限为2048,溢出会导致栈上的数组越界,造成ub,此处溢出基本上会不可避免地造成崩溃(基本上指溢出1个左右我不确定会不会出事)


      IP属地:河北来自Android客户端4楼2024-05-05 14:16
      回复
        又需要补充一些基础知识:
        ① 飞贼抱住的过程中,需要动画播放完一次才会开始升空
        ② 被飞贼抱住或升空的植物,会停止除了极少数特性外的游戏特性更新,包括灰烬植物的爆炸更新(但不包括寒冰菇,毁灭菇的消失,所以寒冰菇毁灭菇想要做到一直留存需要额外进行一次pss操作)
        ③ 醒着的灰烬植物不受啃食伤害


        IP属地:河北来自Android客户端6楼2024-05-05 14:20
        回复
          先解释下4,5路的结构吧!
          4路飞贼使用frs换为花盆动画,让他抱住一个辣椒,抱住的过程中在花盆上放置一个植物压住,花盆上有植物时动画速度为0,所以就可以卡住飞贼,从而让辣椒持续存在。
          辣椒换成樱桃或者预瞄准状态的窝瓜也可以,换成寒冰菇毁灭菇需要唤醒以及额外的pss操作,所以最推荐的就是樱桃辣椒了。


          IP属地:河北来自Android客户端7楼2024-05-05 14:23
          回复
            用于压花盆的植物,能一直存在,并且不会去攻击图上的这些僵尸就行。
            什么大蒜啊保护伞啊坚果墙啊都行。


            IP属地:河北来自Android客户端8楼2024-05-05 14:23
            回复
              4路的所有普通僵尸,利用frs换到同一个小喷身上。具体操作是先把一个普通僵尸动画整没,再等一个一模一样动画ID的普通僵尸,再整没,循环往复,最后再整一个动画ID一样的植物就行。
              按理说不整这个植物也可以,但是让僵尸没动画有点奇怪,就整了。
              这个用于换动画的植物也需要持续存在而且不打这些僵尸,而且不推荐坚果墙(坚果墙有_ground图层,会导致僵尸往右边飞)。


              IP属地:河北来自Android客户端9楼2024-05-05 14:27
              收起回复
                4路大概有942个僵尸,这个数据可以改,后面会专门描述这些数据这么来的。


                IP属地:河北来自Android客户端10楼2024-05-05 14:28
                回复
                  1路的舞王僵尸一共50个,其左右伴舞绑定到4路普通僵尸身上,从而实现舞王僵尸位置不动且没有左右伴舞。
                  这里是代码构阵,所以也绑定了上侧伴舞,但是没有任何影响。


                  IP属地:河北来自Android客户端11楼2024-05-05 14:29
                  回复
                    接下来描述一下frs操作的动机:
                    叠1023个僵尸,如果不进行frs,一定有1023个动画,这时来一个植物就已经1024个动画了,阳光暂停等地方都有动画,会导致动画溢出。
                    所以使用frs大量减少动画数量。


                    IP属地:河北来自Android客户端12楼2024-05-05 14:30
                    回复
                      接下来描述僵尸在水里的意义:
                      僵尸和僵尸的影子都占据绘制对象,如果不放水里,已经有2046个绘制对象,算上UI有关的,已然溢出。
                      所以需要让这些僵尸没啥影子,非常简单的方法就是放水里(还有其他方法,但是这个挺间接)。


                      IP属地:河北来自Android客户端13楼2024-05-05 14:31
                      回复
                        舞王僵尸召唤伴舞后,需要在每次选卡前清理伴舞,再在每次选卡后,第一波僵尸出现前召唤出来。
                        这是为了防止选卡时的僵尸造成的崩溃。


                        IP属地:河北来自Android客户端14楼2024-05-05 14:32
                        回复
                          选卡至多25个僵尸,那一定至少要有25个伴舞。保险起见,直接放50个吧。
                          942是计算1023-50-30(按照30个伴舞计算了,无所谓),再减去飞贼的1,一共942。
                          僵尸数量已经满了之后,舞王僵尸召唤不出伴舞,但是会试着一直召唤。


                          IP属地:河北来自Android客户端15楼2024-05-05 14:34
                          回复
                            最后说一下有关僵尸波数的问题:我这里采用了很极限的情况,所有僵尸来自第1波,所以除了最开始那波刷新时间是满的,后面因为0乘任何数都是0,都会第一时间达到允许刷新的血量,波数过的很快。当然一大波这种另说。
                            实战里大概率属于哪波的都有,会导致每波都等满时间。


                            IP属地:河北来自Android客户端16楼2024-05-05 14:36
                            回复
                              运阵方法 →
                              带卡仅需一个窝瓜。
                              开始时不要进行太多暂停,不女仆的情况下开局的时间足够召出伴舞(或者女仆直接召出来也行)。
                              看到结束的字幕时,放置窝瓜击杀伴舞,同时使用暂停防止舞王僵尸召唤伴舞。(或者可以额外携带高坚果南瓜头等简化操作,让舞王啃食而防止其召唤,下一轮开始时快速地铲掉)


                              IP属地:河北来自Android客户端17楼2024-05-05 14:38
                              回复