Input - KlayGE游戏引擎 Skip to content

Archive

Tag: Input
上一篇介绍了Win7的touch和手势识别状态机。在Win8中,touch API虽然还存在,但新增了一个更方便使用的Pointer API,本篇会介绍一下它的使用。 Win8桌面的Pointer 和Win7的Touch相比,Win8的Pointer成熟得多了。它分为down、up、update等多个消息,甚至还有wheel消息。也就是说,相当于鼠标消息被完全移植过来了,并加入了触点ID。所以可以和容易地把原先处理鼠标消息的经验和代码都转移到WM_POINTER的系列消息来。在功能上还胜过Touch的一点在于,Pointer不光支持触摸屏,还支持鼠标、电子笔等多种设备,并可以返回之前n帧的历史坐标。目前KlayGE并没有用那些功能,仍是把几个基本的消息转到一个经过抽象平台无关的数据结构上。 需要注 ...
上一篇提到了,KlayGE的输入系统正在大改,将要加入触摸支持。本篇将会介绍Win7的touch,以及简单的手势识别。 Win7 Touch API 实际上Win7开始就支持了多触摸,只是UI和续航没跟上,使得Win7的平板体验一般。Win7的touch分为两个层面,第一个是底层的WM_TOUCH消息,应用程序收到的是触点坐标等;第二个是高层的WM_GESTURE消息,应用程序收到的就是已经经过识别的手势了。两者只能选择一个,不能两个都收到。默认的是WM_GESTURE,如果调用了RegisterTouchWindow,系统就会不再发送WM_GESTURE,而把底层的WM_TOUCH发给应用程序。WM_GESTURE虽然简单,但缺点很明显。它受限于支持的几种手势,没有办法添加自定义的。所以这里只打算介绍WM_TOUC ...
KlayGE的输入系统从2003年完成之后,几乎就没有大的修改。谁想到在10年后的今天,输入系统几乎完全重写了。 DirectInput的缺点 原先KlayGE的输入系统只有DirectInput一个插件,基本就是简单地把DirectInput包一层,实现对键盘、鼠标和手柄的支持。在核心层,获取了设备的输入之后,经过action mapping系统,把输入转化成具体动作传给应用程序。这套系统就这么工作了很久,直到这两年触摸输入设备软硬件的发展,只支持传统输入就显得限制很大了。 即便是在键盘、鼠标上,DirectInput也不像它的名字那样direct了。根据Taking Advantage of High-Definition Mouse Movement,在系统内部,DirectInput会建立一个独立线程,读取WM_INPUT,所 ...