|
|
发表于 2007-2-28 17:56:00
|
显示全部楼层
Re:请问大家一般是怎么处理键盘输入的?
晕,为什么要用stack……我原来想的是每个键位对应一个链表,这个键被触发时会便利这个链表,如果一个链表项的bool enabled(void)函数为true,那么就调用它的callback……
-----------------------------------------------------------
这样做的话,手动控制Enable和Disable会让写游戏逻辑的程序员吐血致死。因为大部分情况下,新的Action总是在替代旧的Action。如果新的需要旧的Action的功能,可以有无数种做法。但要是用一个简单的方法,让游戏逻辑脱离大量不必要的Enable和Disable则比较麻烦。Stack的做法只要能保证状态进入和退出的顺序一致,Config就会自动处理Enable和Disable的功能。写游戏逻辑的根本就不用手动Enable和Disable一个Action。
----------------------------------------------------------
另外想起来,如果是CheckState,那么岂不是每帧都要把每个键位都check一遍?而且如果以后有效键位增加了还要改动引擎的编码。那样还不如让输入系统来调用我的callback传递事件,这样我只需要把接受到的事件处理一下就行了。
----------------------------------------------------------
不是每个键位都Check,只是有Action的键才Check。而AM本就是输入系统调用你的Callback啊?我说不是了么? ^_^
看来是没说清楚。流程是:键消息来的时候,先看有哪些键被Map了,For这些键,每个键,判断是否命中了Action所需求的相应状态(按下、抬起、双击),取Stack top的Action,然后调用Action里面的Callback即可。增加Action只不过是增加Callback,引擎代码不必更改啊。 ^_^否则干嘛做AM啊。
------------------------------------
“跨设备的控制”不太明白。
设备无关性……也不明白,因为即使使用时只是注册一下键位和callback,那也需要对不同设备的键位进行区分,而如果是直接检测键位,其实也差不多,似乎用ctrl+c/ctrl+v也麻烦不到哪去。
------------------------------------
Action射击,可以对应LMouse,也可以对应K键,也可以对应手柄A键,逻辑层只需要关注射击消息是否被触发,不必要去管它不该管的。而在逻辑层检测键位就要麻烦多了。我说过了,小习作可以,大项目危险。
-----------------------------------------------
action的复杂性我倒没感觉到,反正对于输入部分而言,无论什么action都只是一个函数callback而已。至于这个action内部的逻辑,就完全取决于要做什么事了。
-----------------------------------------------
对阿,就是写Callback,会比写AM麻烦的多。你如果做一个复杂点的项目就知道了,要写的Callback相对于AM的简单性而言,太多了。
还是那句话:如果只是用OGRE做个习作,真的没必要做AM。 |
|