免责声明:我从未使用过这个库!
我发现了这个:
Any other (printable) key :
TCODK_CHAR
所以当你收到时TCODK_CHAR
,你会char c;
从这个结构中寻找:
typedef struct {
TCOD_keycode_t vk;
char c;
unsigned pressed : 1;
unsigned lalt : 1;
unsigned lctrl : 1;
unsigned ralt : 1;
unsigned rctrl : 1;
unsigned shift : 1;
} TCOD_key_t;
我相信它会包含按下的字符。
更新
这是一个 C 库,所以预期的用法可能是这样的:(key
这里是类型TCOD_key_t
)
switch(key.vk) {
case TCODK_UP : onUp(); break;
case TCODK_CHAR: onChar(key.c); break
default: break;
}
使用地图,您可以执行以下操作:
if(TCODK_CHAR == key.vk)
onChar(key.c);
else
specialCommands[key.vk]();
(在
specialCommands
哪里std::map<TCOD_keycode_t, std::function<...> >
)
您可以将char
回调添加到映射中,但是,如果TCOD_keycode_t
枚举的某些成员将匹配字符代码,则您将发生键冲突(即,如果假设TCODK_UP
具有 value 65
,它将与 char 'a'
(ASCII 代码65
)相同)。
您还可以有另一个map
或array
将字符 ( key.c
) 映射到不同的函数。