我的SDL程序正在返回一个对所有密钥都相同的存储器地址,我试图打印密钥的名称,即如果用户按下' F' F' F' F'关键控制台输出' F'。我将如何编辑我的代码来实现这一目标?
void Game::handleEvents()
{
SDL_Event event;
if(SDL_PollEvent(&event))
{
switch (event.type) {
case SDL_QUIT:
g_bRunning = false;
//SDL_Quit();
break;
case SDL_KEYDOWN:
//this is the line that is not working as expected.
std::cout << &event.key.keysym.sym << std::endl;
default:
break;
}
}
}
答案 0 :(得分:3)
使用SDL_GetKeyName()获取表示按下的键的可打印字符串。由于SDL_Keycode(SDL1.2中的SDLKey)是作为枚举实现的,因此不能简单地将其转换为可打印字符,特别是对于“shift”和“alt”这样的键。
试试这个:
std::cout << SDL_GetKeyName(event.key.keysym.sym) << std::endl;
答案 1 :(得分:2)
&
中的std::cout << &event.key.keysym.sym << std::endl;
是不必要的。这是打印地址而不是实际数据的原因。
然而,即使删除&
,这也不会为f
keypressed输出'f',因为value是整数枚举,而不是ASCII代码值。
答案 2 :(得分:1)
f的键码是SDLK_f
一个简单的if语句应该这样做:
case SDL_KEYDOWN:
if( event.key.keysym.sym == SDLK_f )
std::cout << "f was pressed" << std::endl;
break ; //this was missing
SDL不区分案件,因此如果按下班次等,您需要额外检查。