libtcod c ++的键盘命令功能

时间:2015-12-15 23:19:49

标签: c++ libtcod

我最近从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是否有办法将所有键盘功能放在一张地图上?

1 个答案:

答案 0 :(得分:1)

免责声明:我从未使用过此库!

我找到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]();

(其中 specialCommandsstd::map<TCOD_keycode_t, std::function<...> >

您可以将char回调添加到地图中,但是,如果TCOD_keycode_t枚举的某些成员与字符代码匹配,则会发生密钥冲突(即假设{{1} }具有值TCODK_UP,它将与char 65(ASCII代码'a'))相同。

您还可以使用另一个65map将字符(array)映射到不同的功能。