关于猫崽指令的困惑及补充|欢迎评论解答

关于猫崽指令的代码分析(仅个人观点,欢迎讨论补充):在代码的slugnpcai类中有一个用于玩家与猫崽沟通的函数communicate,代码如下:

可以看见,在这里对猫崽的行为模式进行控制 的主要是几个变量:player.inputpackage里所使用的player.input里的x和y,以及jmp(即是否按下跳跃键的判定),我们找到player.inputpackage的定义

看它和player.input的值在哪里被改变

……
我放弃了,让我们直接从现象推测本质,看看这个input数组里的x和y会造成什么效果,来推测它们的作用
经过一段时间的查找与核对,我最终选择了菜单控制作为推测x和y的样本,因为大家都知道在菜单页按上下左右键可以代替鼠标选择菜单按键,代码如下:

以第870和871行为例,这两行代码的意思是当input[0].x的值不为0且不等于input[1].x时,将菜单选择的光标移到input[0].x的位置,所以我们可以推测,input[0].x和input[0].y是此帧检测到上下左右按键按下的值,而input[1]的x和y则是上一帧检测到上下左右按键是否按下的结果(证据是当我们长按上下左右的某一个按键时,菜单页的被选择按钮并不会呈现出led灯一样的轮回闪动,所以不论按下按键多久,都只会检测为“按下一次”)。那么我们接下来就要区分x和y,哪个是上下键,哪个是左右键,按下的值又分别是什么。

回到控制猫崽行为的communite函数,已知下键和跳跃是让猫崽待在原地,那么从725~727行就可以推测,我们按上键和下键,是改变input[0].y的值,当按下下键时,值为-1,按下上键时,值为1,不按则为0,x同理。
综上我们可以推得这个函数的作用:先检测是否按下跳跃键(注意这里是“按下”,而非“按着”),在按下跳跃键的这一帧检测是否同时按着上键或者下键,当同时按着下键时发出“待在原地”指令, 当同时按着上键时发出“一起玩”指令。所以评论区有些朋友说按下和跳跃没有反应,因为检测逻辑是必须要在同一帧达到“按下”跳跃和“按着”趴下,在现实操作中很难精准控制,为了方便操作我们可以更改为先按着趴下再按跳跃,就可以成功发送指令。
而736行for循环的指令意思为:检测玩家在一段时间内的跳跃状态,是否多次跳跃,也即up发现的“连续跳跃给猫崽发指令自己玩”,请注意根据代码,这里的连续跳跃让猫崽自己玩和上+跳跃让猫崽自己玩,猫崽的行为表现都是使用同一个状态this.toldToPlay ,只是为其赋值的函数不同,相当于小范围的“自己玩”和大范围的“自己玩”,所以会呈现出视频中显示的区别。
其实我不是很擅长代码然后雨世界的逻辑又层层嵌套很难看懂,如有错误疏漏还请指正,让让我吧TAT