libtcod c++ 的键盘命令功能
keyboard command functionality with libtcod c++
我最近为我的 rougelike 从 SFML 切换到 libtcod,因为我发现 libtcod 对于这类游戏更方便。我找不到任何解决方案的一个问题是如何存储键盘绑定函数。
在 SFML 中,我可以为我的按键功能执行此操作
std::map<sf::Keyboard::Key, std::function<void()>> keyboardCommands
在 libtcod 中有 TCOD_Key_t 结构(将替换映射中的 sf::Keyboard::Key),它适用于 F 键、Esc 等特殊键。but "nothing" for letters.
有没有办法使用 libtcod 将我所有的键盘功能放在一个映射中?
免责声明:我从未使用过这个库!
我找到了 this:
Any other (printable) key :
TCODK_CHAR
因此,当您收到 TCODK_CHAR
时,您会从 this struct:
中查找 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
的值为 65
,它将与 char 'a'
(ASCII 码 65
)的键相同。
您还可以使用另一个 map
或 array
将字符 (key.c
) 映射到不同的函数。
我最近为我的 rougelike 从 SFML 切换到 libtcod,因为我发现 libtcod 对于这类游戏更方便。我找不到任何解决方案的一个问题是如何存储键盘绑定函数。
在 SFML 中,我可以为我的按键功能执行此操作
std::map<sf::Keyboard::Key, std::function<void()>> keyboardCommands
在 libtcod 中有 TCOD_Key_t 结构(将替换映射中的 sf::Keyboard::Key),它适用于 F 键、Esc 等特殊键。but "nothing" for letters.
有没有办法使用 libtcod 将我所有的键盘功能放在一个映射中?
免责声明:我从未使用过这个库!
我找到了 this:
Any other (printable) key :
TCODK_CHAR
因此,当您收到 TCODK_CHAR
时,您会从 this struct:
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
的值为 65
,它将与 char 'a'
(ASCII 码 65
)的键相同。
您还可以使用另一个 map
或 array
将字符 (key.c
) 映射到不同的函数。