植物大战僵尸吧 关注:558,496贴子:5,072,152
  • 41回复贴,共1
求助

请问有熟悉原版代码与手机各版代码的大佬来分析下冰车移速相关吗?

只看楼主收藏回复

事情是这样,我是个pvz无尽爱好者(但还只是初入茅庐,3级以上的炮阵就玩不来了)以及b站庄不纯整的pgvz兴趣玩家,庄不纯的pgvz如果有了解的应该知道,大体是将原植物进行拟人娘化的改版,而庄不纯团队在手机中程序的基础上做出了十槽(此前手机版中只有搬运TV的TV版有十槽,但由于不完全适配手机,触屏体验不佳),已经算是开创性了。而目前的pgvz从无尽特性角度来说除了冰车是类似北美版的减速较晚冰车、进家判定仍然偏左外,其余的就是电脑年度版。因此我一直有联系庄不纯团队的程序相关人员,希望他能将冰车改为电脑版中的冰车,写程序的人虽然答应了下来,但几个月过去了都没改成功,他给我的解释是电脑与手机中的坐标系不一样(pgvz手机版底版是WP版),冰车开始减速的位置不好确定,而我就开始了以下操作(见图)
但是程序那边仍然说有了开始减速时间,在手机中仍不好定位(我寻思着你不能到时间直接冻结棋盘读取僵尸位置坐标吗?)另外,冰车减速的严格机制到底是怎么样的?它的底层逻辑到底长什么样(翻译成物理语言就是:s-t图的图线方程到底是啥?),真的是两段前后加速度不一致的匀减速吗?(因为二次函数已经是我试过中拟合效果最好的了)









IP属地:湖南来自Android客户端1楼2024-10-16 12:12回复
    对了,文中有一处字打错了,进家判定是偏右不是偏左。还有,有没有吧友知道雪橇区这关从选卡界面点确定开始到第一个怪刷新的时间间隔是多少秒?


    IP属地:湖南来自Android客户端2楼2024-10-16 12:24
    收起回复


      IP属地:江苏4楼2024-10-16 13:02
      收起回复
        楼主的黄表有些太老了。(


        IP属地:江苏5楼2024-10-16 13:08
        回复
          wp移植版开源了,可以看下源代码
          以下是几个片段
          public void UpdateZamboni()//3update
          {
          if (mPosX > 400f && !mFlatTires)
          {
          mVelX = TodCommon.TodAnimateCurveFloat(700, 300, (int)mPosX, 0.25f, 0.05f, TodCurves.Linear);
          }
          public static float TodAnimateCurveFloatTime(float theTimeStart, float theTimeEnd, float theTimeAge, float thePositionStart, float thePositionEnd, TodCurves theCurve)
          {
          float num = theTimeAge - theTimeStart;
          float num2 = theTimeEnd - theTimeStart;
          float theTime = num / num2;
          return TodCommon.TodCurveEvaluateClamped(theTime, thePositionStart, thePositionEnd, theCurve);
          }
          public static float TodCurveEvaluateClamped(float theTime, float thePositionStart, float thePositionEnd, TodCurves theCurve)
          {
          if (theTime <= 0f)
          {
          return thePositionStart;
          }
          if (theTime < 1f)
          {
          return TodCommon.TodCurveEvaluate(theTime, thePositionStart, thePositionEnd, theCurve);
          }
          if (theCurve == 网页链接 || theCurve == 网页链接 || theCurve == 网页链接 || theCurve == 网页链接 || theCurve == TodCurves.EaseSinWave)
          {
          return thePositionStart;
          }
          return thePositionEnd;
          }


          IP属地:江西来自Android客户端6楼2024-10-16 13:15
          收起回复
            @xiao-He 不对啊,这上面不是说潜水速度参数是0.3吗?可是潜水4s走完一格,而冰车初速度走完一格只需要3.2秒啊,而冰车如果一开始速度参数是0.25,怎么反而比潜水还快呢?


            IP属地:湖南来自Android客户端8楼2024-10-16 15:19
            收起回复
              这下冰车运动方程问题解决了,谢谢大家x-t图见此,运动方程为x=623.1492794e^(-t/2000)+200;x单位为px,t单位为cs


              IP属地:湖南来自Android客户端12楼2024-10-16 20:24
              回复
                最新的拟合情况,黑点为匀速与变速分界点,蓝点为表中实测数据,绿线为拟合线,可以看到几乎完全吻合,至于偏的那一点点是因为理想运动方程是按速度完全连续变化计算,而实性上坐标有像素点,速度变化实际上是间断的,所以产生了极小的误差,另外表中时间分度值为cs本身就存在系统误差


                IP属地:湖南来自Android客户端13楼2024-10-16 20:59
                回复
                  再向大家公布个新情况,之前的计算由于没考虑到冰车的攻击判定左限与冰车坐标并不是完全重合,因此计算出的公式出现了偏差,而在修正之后,图线与实测点的拟合度又高了许多,而最新的拟合方程为x=610.167002753834284344262e^(-t/2000)+200,冰车开始减速时间为3.9825秒,这次更精准了



                  IP属地:湖南来自Android客户端14楼2024-10-19 18:52
                  回复
                    可以参考pvz wiki 僵尸速度一栏的内容


                    IP属地:澳大利亚来自手机贴吧16楼2024-10-20 10:18
                    回复
                      冰车: 亦属于匀速僵尸,尽管视觉上其越来越慢。其速度参数并非随机值而是由横坐标唯一确定的数。具体为: x≥700 时,速度参数0.25; 401≤x<700 时,横坐标相比于700每减少1,速度参数减少0.0005; x<400 时,速度参数0.1。


                      IP属地:澳大利亚来自手机贴吧17楼2024-10-20 10:21
                      回复
                        up研究类似问题最好开一个tas和showme,这样可以精确了解每一帧僵尸相对速度和坐标大小


                        IP属地:澳大利亚来自手机贴吧18楼2024-10-20 10:25
                        回复