楼主问的问题可以拆成两个部分,“怎样判断松开了按键”和“怎样让动作恢复到‘站立’”。
其中后者的话楼主应该是会做的,既然能让状态从站立变成其他,那理应有变回去的方法。至于具体是什么,要看楼主的状态逻辑,是直接改的贴图,还是有变量来记录,甚至……是根据某些object的实例是否存在。
前半句的判定大约有两种手段,一种是直接使用3楼提到的key up事件(在GM8时代叫key release),另一种就是在其他事件里用if进行条件判断,要使用的函数是keyboard_check_released。是的,这和2楼的回答并不一样。2楼代码的解释是“在没有按下任何键时,执行…”,虽说和LZ的原文有出入,但这实际是执行效果的手感比楼主说的逻辑还流畅的做法。
嗯,既然是新手,就介绍下容易出现的误区吧……
有一种BUG来源叫“分支判断不完善”,或者说是“对于可能出现的情况预估不充分”。在键盘控制移动的游戏里,经常出现的一种情况就是“同时按下了多个方向键”,比如向右上方移动,多数游戏的做法是同事按住右和上来实现。如果玩家在斜着走了一小段以后要改成竖直向上走呢,就会松开右方向。这个时候问题就来了,按游戏的“松开按键即停下”逻辑,此时按住上方向的玩家是站在原地不动的。即使是只有左右2方向的游戏,如果在向左到达固定位置迅速改成向右时如果先按下了右后抬起了左,同样会导致这样的BUG。用楼主的方法存在的这些问题如果改为判断“啥都没按时”进行对应动作就没问题了嘛??不,问题还在,但坏了个位置。这时BUG出现时机换成了“从走路到停下,松开了所有方向键,但攻击键没有放开”时。是的,不光是攻击键,键盘上任意一个键被压住都会导致这个停下的判定失效。