格斗类游戏的键盘处理

来源:互联网 发布:单片机简易秒表设计 编辑:程序博客网 时间:2024/05/17 07:29
格斗类游戏对于键盘的要求极高,因此,键盘处理就成了格斗类游戏的一个极其重要的部分,现在就让我们谈谈电脑上格斗类游戏键盘处理的实现。
  在电脑上使用格斗游戏不同于家用机和街机,家用机和街机使用的是操作手柄,操作手柄的按键使用的是电压叠加的原理,因此可以支持多个按键同时按下。而电脑上却不同,电脑上使用的是键盘,键盘采用的扫描码的形式,如果不使用组合键(Ctrl、Alt和Shift这些),那么如果同时按下键盘的AB两键,得到的值有两种情况:AB或BA。而且,如果先按下A键不放,再按下B键不放,得到的将是ABBBBB...的序列而不是需要的ABABAB...的序列。再有一种,加速的按键,如果连按两下A,再按住A不放,人物将由走的状态变为跑的状态。还有,电脑上的键盘有缓冲区。如果缓冲区已满,将无法接受到任何按键。
  说了这么一大堆问题,也该到解决问题的时候了。先解决多键同时按下的问题,按键最多只有两键同时按下吧(比如按上+前+手,向前跳)。那么我们就将键盘缓冲区设置为两个单元,每一次从键盘缓冲区取两个值,再清空缓冲区,准备下一轮读取。如果从键盘缓冲区中取一次就空了,那么该次取值结束。可以用下图表示:



比如规定按住上+左为相左上运动,那么用bioskey读取的值如果为0x4800(上的扫描码)、0x4b00(左的扫描码)或0x4b00、0x4800则执行主角向左上跳跃的动作序列。
  读取的方式有了,接下来就要对输入的键进行处理了。在进行键的处理时,需要涉及时间和状态两个机制。时间机制限定在规定的时间内如果输入了一组动作(如发冲击波:下、前、手),满足必杀技则执行相应的必杀技。如果其中有某两个动作相隔时间超过了某个指定的值,则认为该动作不符合必杀技要求,变为普通动作(如发冲击波的动作可能变为:下蹲,击拳)。现在就让我们构造一个判断必杀技的图表演示:

(设定必杀技间隔时间为0.3秒,即超时意味着每隔0.3秒检查一下输入,如果下一个键隔当前键的时间超过了0.3秒说明超时,而且还要建立一个存储动作序列的栈。)


该图表只是键盘控制的一个简单骨架,里面还没有涉及到更深层次的问题。但已经可以解决大部分问题了,就到此为止吧。
 
原创粉丝点击