【发布时间】:2021-12-16 06:31:34
【问题描述】:
在 C++ 控制台程序中,我发现了如何在 Windows 上检测和箭头键,并且我发现了许多与问题无关的其他内容(尽管我认为这些搜索词很好) ,但我想知道是否有一种独立于平台的方法来检测箭头键按下。一个不错的第二个地方是如何检测 unix 和 mac 中的箭头键按下。代码片段将不胜感激。
【问题讨论】:
标签: c++ user-input
在 C++ 控制台程序中,我发现了如何在 Windows 上检测和箭头键,并且我发现了许多与问题无关的其他内容(尽管我认为这些搜索词很好) ,但我想知道是否有一种独立于平台的方法来检测箭头键按下。一个不错的第二个地方是如何检测 unix 和 mac 中的箭头键按下。代码片段将不胜感激。
【问题讨论】:
标签: c++ user-input
没有跨平台的方法可以做到这一点,因为它不是由 C 或 C++ 标准定义的(尽管可能有一些库在不同平台上编译时抽象出差异)。
我相信您在 POSIX 机器上寻找的库是 curses,但我自己从未使用过它——我可能是错的。
请记住,控制台程序(即 gnome-terminal 或 konsole 或 xterm)完全有可能将这些键用于其他功能。
【讨论】:
正如比利所说,没有标准的跨平台方法。
我个人将这个(面向游戏的)库用于所有输入,跨平台 win/linux/mac :http://sourceforge.net/projects/wgois/
【讨论】:
您可以使用SDL2 进行跨平台操作。
示例代码:
#include <SDL2/SDL.h>
int main()
{
SDL_Event event;
SDL_PollEvent(&event);
if(event.type == SDL_KEYDOWN)
{
// Move centerpoint of rotation for one of the trees:
switch(event.key.keysym.sym)
{
case SDLK_UP:
// do something
break;
case SDLK_DOWN:
// do something
break;
case SDLK_LEFT:
// do something
break;
case SDLK_RIGHT:
// do something
break;
case SDLK_ESCAPE:
// do something
return 0;
default:
break;
}
}
return 0;
}
【讨论】:
undefined reference to `SDL_PollEvent' collect2: error: ld returned 1 exit status我做错了什么??我实际上只是复制了这段代码并下载了库......