带有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等特殊键,但对字母"不适用"。
有没有一种方法可以使用libtcod将我所有的键盘功能放在一个映射中?
免责声明:我从未使用过这个库!
我发现了这个:
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
的值为65
,则它将与字符'a'
(ASCII代码65
)是相同的密钥)。
您也可以使用另一个map
或array
,将字符(key.c
)映射到不同的函数。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 从命令行c++发送文本文件名
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- LLVM | codegen 用于带有命令行选项的程序输入功能
- C 使用多个功能中从命令行传递的文件
- 在C/C 中使用检查功能的Windows NT命令行代码循环
- 如何在功能系统中使用命令()
- 具有读写功能的 UNIX 管道系统可执行"ls -la"命令
- 我们可以互换控制台和 Win32 C++ 的命令和功能吗?
- Ubuntu命令在C 程序中获取所有功能
- 如何获取窗口的命令行"打开方式.."功能?
- 带有libtcod c++的键盘命令功能
- 如何在gcc中保留命令行选项,但为某些功能添加更多优化标志