首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用libtcod c++的键盘命令功能

使用libtcod c++的键盘命令功能
EN

Stack Overflow用户
提问于 2015-12-15 23:19:48
回答 1查看 290关注 0票数 1

最近,我从SFML切换到libtcod,因为我发现libtcod对于这类游戏更方便。一个我找不到任何解决方案的问题是如何存储键盘绑定函数。

在SFML中,我可以为我的关键函数做到这一点。

代码语言:javascript
复制
std::map<sf::Keyboard::Key, std::function<void()>> keyboardCommands

在libtcod中,有一个TCOD_Key_t结构(它将取代映射中的sf::键盘::键),它适用于F键、Esc等特殊键。但“没什么”的信。

有办法用libtcod把我所有的键盘功能放在一张地图上吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 23:25:28

免责声明:我从未使用过这个图书馆!

我找到了

代码语言:javascript
复制
Any other (printable) key :
TCODK_CHAR

因此,当您收到TCODK_CHAR时,您需要从这个结构中查找char c;

代码语言:javascript
复制
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库,所以预期的使用可能是这样的:(这里的keyTCOD_key_t类型的)

代码语言:javascript
复制
switch(key.vk) {
    case TCODK_UP : onUp(); break;
    case TCODK_CHAR: onChar(key.c); break
    default: break;
}

有了地图,您可以做如下事情:

代码语言:javascript
复制
if(TCODK_CHAR == key.vk)
    onChar(key.c);
else
    specialCommands[key.vk]();

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

您可以将char回调tinto放到映射中,但是,如果TCOD_keycode_t枚举的某些成员将匹配字符代码,则会出现密钥冲突(如果假设TCODK_UP有值65,则它将与char 'a' (ASCII代码65)相同)。

您还可以使用另一个maparray将字符(key.c)映射到不同的函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34301299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档