本帖最后由 灯笼菜刀王 于 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 就是复数条件了, 这样节省一层分歧整理起来也舒服些 |
本帖最后由 灯笼菜刀王 于 2019-3-16 12:06 编辑 ![]() ![]() 使用@a 作为记录时间, 使用@按住后松开 作为是否重复按下的判定 |
本帖最后由 灯笼菜刀王 于 2019-3-14 22:10 编辑 ![]() 按F1, 搜索下 Input , 可以看到RMXP所支持的按键模式, 然后考虑下, 怎么利用它们, 配合"按键间隔时间" 来进行动作分歧吧 比如说,按住跑步, 这个很容易, 用press就可以了, 但是按住之前,因为也触发了"按一下 - 翻滚"的判定, 所以会先滚再跑... 如果把翻滚的条件改为, 按下后10帧内松开, 那就不会先滚咯 同样的, 跳跃的条件就是, 按下超过10帧后松开(不能小于10帧, 否则就触发翻滚判定了), 同时间隔10帧内再次按下, 这样三个动作就区分开来了 具体要怎么做, 就你自己思考啦, 不要麻烦我XD ![]() |
我印象里rm是无法识别按下和弹起,比如你按着A再按B应该是有效的, 但是按住a再按a就不清楚了,比如连续按两次方向键,后一下是长按切换对应方向跑动,松开停止的act操作,因为无法识别弹起所以无效。 开关如果都处理不了,还真不知道,等高手帮忙。 |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2025-2-22 19:08
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.