植物大战僵尸吧 关注:560,695贴子:5,085,522
  • 14回复贴,共1

【研究党】关于巨人扔小鬼过程中的坐标变化

取消只看楼主收藏回复

首先祝各位吧友 人元12015年 新年快乐


IP属地:江苏1楼2014-12-31 22:45回复
    =。=最近两个星期什么事都没有做,我果然是惰怠了……明明高三狗在各种意义上都没理由偷懒才对。
    关于坐标变化的研究原本不是什么困难的工作,不过由于这段时间的偷懒心态,花的时间还是超过预期,而结果未必达到预想。这点很抱歉,我会找个时间去治拖延症的……


    IP属地:江苏2楼2014-12-31 22:46
    收起回复
      2025-06-02 19:32:08
      广告
      实验场景为泳池,关卡为Last Stand
      5只白眼巨人的初始X坐标统一为700.0,血量统一为400,在同一时刻扔出imp。


      IP属地:江苏3楼2014-12-31 22:47
      回复
        以下图表中,横轴都为时间(单位是百分之一秒),以巨人开始扔imp动作的时间点为计时起点
        巨人X坐标变化情况如下图

        一开始毫无变化,对应巨人扔imp的过程中不移动。随后X坐标逐渐减小,对应扔完imp后左行……很正常。
        巨人Y坐标变化情况如下图

        ……毫无变化,很正常,正常游戏中不会看见巨人上下移动。(从图中也可以看出,这次测试中5个巨人分别位于第一行、第二行、第三行、第三行、第五行)


        IP属地:江苏4楼2014-12-31 22:52
        回复
          imp的X坐标变化情况如下图

          线性减小的部分对应在空中飞行的阶段。此后似乎有一段静止,不过这一段只持续不到0.3秒。随后就是正常左行……很正常。
          imp的Y坐标变化情况如下图

          图片来自:zjfaok的百度相册
          Y坐标毫无变化……很正常——才怪。imp在飞行过程中,显然横向和纵向都有一定的速度,因此Y坐标不可能不变。
          原因在于,僵尸属性中还有一条
          0x6A9EC0 +0x768 +0x90 +(0x84 + n*0x15C)//(Float)僵尸的离地面高度
          imp的离地面高度变化情况如下图

          先增大后减小,这样就正常了。


          IP属地:江苏通过百度相册上传5楼2014-12-31 22:57
          回复
            可以目测出,imp飞行过程中,横向速度不变,纵向速度随时间均匀变化。不用说,这是一个斜抛运动。imp初位置相同,横向速度相同,加速度相同,唯一不同的是纵向的初始速度,反映在图表上就是imp的其他属性变化一致,以至于在图表上各个imp的线条是重叠的,而 离地面高度 的变化则各不相同。


            IP属地:江苏7楼2014-12-31 23:04
            收起回复
              以下图表通过imp飞行过程中离地面高度的变化,反映50只巨人在初始X坐标为x,血量由满值变为400时,扔出的imp的飞行情况
              x=401

              x=450

              x=500

              x=550

              x=600

              x=650

              x=700

              x=750


              IP属地:江苏13楼2014-12-31 23:30
              收起回复
                原始资料: http://pan.baidu.com/s/1bn4dpcb


                IP属地:江苏来自手机贴吧31楼2015-01-01 10:28
                回复
                  2025-06-02 19:26:08
                  广告
                  汇编代码好难读……
                  在谈定量的结果之前,先重复一遍 7L 的结论
                  同一位置扔出的imp,飞行过程中,imp初位置相同,横向速度相同,加速度相同,唯一不同的是纵向的初始速度


                  IP属地:江苏45楼2015-02-08 23:57
                  回复
                    前面已经提到
                    0x6A9EC0 +0x768 +0x90 +(0x84 + n*0x15C) //(Float)僵尸的离地面高度
                    还有一个相关的地址
                    0x6A9EC0 +0x768 +0x90 +(0x120 + n*0x15C) //(Float) imp飞行过程中,下一帧+84减少的量
                    即“纵向速度”


                    IP属地:江苏46楼2015-02-08 23:59
                    回复
                      imp 被扔出瞬间
                      初始X坐标等于对应的巨人X坐标减去133.0
                      初始Y坐标等于对应的巨人的Y坐标
                      初始离地面高度为88
                      横向速度为3.0
                      竖直向下的加速度大小为0.05
                      —— 这都是看图就能得出的
                      但 0x120 (纵向速度)的初始化则是相当复杂的过程,以至于个人虽然花了不少工夫,仍不敢保证下面的解读是绝对正确的
                      令 x 表示 巨人的X坐标,y 表示 0x120 地址的初始值,x' = x - 360 (若是屋顶则再减180)
                      当 40 <x' <= 140 时,y = x' / 3.0 * 0.5 * 0.05
                      当 x' > 140 时,y = ( x' - rand(0,100) ) / 3.0 * 0.5 * 0.05
                      其中 rand(0,100) 表示 0 到 100 之间的随机数


                      IP属地:江苏50楼2015-02-09 06:41
                      回复
                        这下真的可以出几道数学题了……
                        例如
                        时空贴 http://tieba.baidu.com/p/732011315
                        <quote>
                        巨人x<=400不扔imp,400<x<=500时imp落点是巨人位置的单值不单调函数,x>500时imp落点有很大的随机性而边界不单调。
                        </quote>
                        根据本贴提供的数据,计算400<x<=500时上述“单值不单调函数”的表达式,以及x>500时落点的边界值……


                        IP属地:江苏51楼2015-02-09 06:48
                        回复
                          接近一年过去了,还是没有人尝试51L的数学题么……


                          IP属地:江苏58楼2016-01-17 16:29
                          回复
                            不想新开一贴了,就挖这个帖子好了。
                            先推荐一下这个帖子:
                            巨人坐标与小鬼落点坐标的对应关系图
                            https://tieba.baidu.com/p/5788011835


                            IP属地:江苏60楼2018-09-25 05:02
                            回复
                              2025-06-02 19:20:08
                              广告
                              然后说补充研究。
                              关于 imp 的坐标,是从被扔出的同一帧就开始变化(也就是说,被扔出的这帧结束的时候,imp 的X坐标已经在初始X坐标基础上减少3.0),还是从下一帧开始变化。
                              结论是“不一定”= =
                              如图,巨人的X坐标被固定为 410.0,理论上 imp 的状态应该是一致的,然而被扔出的 imp 位置并不统一,X坐标相差了3.0。

                              其原因是,程序的处理是按照对象在内存中的顺序(下标顺序)进行的。
                              假如在程序处理巨人僵尸对象 A 时,产生了小鬼僵尸对象 B。
                              如果 B 在僵尸对象序列中的位置(下标)比 A 靠后,就会在同一帧进行处理 B。如果 B 在僵尸对象序列中的位置(下标)比 A 靠前,按照下标顺序,在这一帧就处理不到新产生的 B,于是这种情况下 imp 的坐标就是从下一帧开始变化。
                              对于简单的情况,可以构造出特定的下标顺序,然而在真实的游戏过程中,这个顺序几乎不可控。于是在应用中,大概需要把两种情况都考虑到。
                              不过似乎不影响最终落点。


                              IP属地:江苏61楼2018-09-25 05:04
                              回复