本帖最后由 灯笼菜刀王 于 2019-3-17 22:48 编辑
确实, 一大堆条件分歧, 不明白思路的话看起来是很混乱
思路是这样的, 先用个变量@a记录按键时间, 为了节省变量, 我们让它按下的时候 以正数来记录, 松开的时候,以负数来记录, 0的时候不动
开始, 第一句是初始化变量@a, 让它不至于是nil, 否则下面的判断会出错
先考虑翻滚, 像前面设计的, 以按下后10帧内松开为条件, 所以 翻滚要在"松开"的分歧里判断, 因为@a是正数的时候就是按过按键了, 所以当@a 大于0 且 小于10的时候, 条件就成立, 该干嘛干嘛, 然后让@a归零
然后考虑跳跃, 这里需要一个"反复按下"的判断, 所以要用个开关来记录"之前有没有按过按键", 之前有没有按过按键, 和翻滚是一样的按键判断, 为了区分它们, 用@a 是否超过10(轻按和长按)来区分
所以, 当@a 大于10的时候, 就是按过一次按键且不是翻滚, 这个时候就可以打开 "按过一次的开关", 然后再次按的时候, 就达成跳跃的条件了, 所以在按下的分歧里, 当"按过一次的开关"打开的时候, 就可以判断为跳跃了, 跳完后关闭开关, 为了避免也许会出现的问题(比如反复跳, 延迟跳, 跑着跑着脑抽跳一下之类的) 我们再加上个@a < 10 的判断, 以保证这个判断只有在第二次按下后10帧内起作用
好了, 这样就OK了, 但是, 善后工作没做, 如果按一下后, 我不继续按, 悠哉的走几步先, 然后再按, 这个时候因为开关是打开的, 所以还是一样可以触发跳跃判断, 这就不合适了, 所以这里还要处理下, 开关打开后, 没有马上接着按的情况, 10帧内没接着按, 就关掉开关, 把@a归零, 该干嘛干嘛
--------------------------------------------
写后面的话, 你要用RM变量来做判断也是可以啦, 不过用事件的条件分歧, 复数条件要套一大串, 不管是操作还是阅读都十分麻烦, 所以这里建议用 条件分歧最后一页的 脚本
这样写 $game_variables[1] > 0 and $game_variables[1] < 10 就是复数条件了, 这样节省一层分歧整理起来也舒服些 |