这是我的代码:
void MainGame::ProcessInput()
{SDL_Event Evnt;
while (SDL_PollEvent(&Evnt));
{switch(Evnt.type)
{case SDL_QUIT: {_GameState = GameState::EXIT;}
break;
case SDL_MOUSEMOTION: {}
break;
case SDL_KEYDOWN: {_InputManager.PressedKey(Evnt.key.keysym.scancode);}
break;
case SDL_KEYUP: {_InputManager.ReleasedKey(Evnt.key.keysym.scancode);}
break;
case 771: {std::cout << "Info1 = " << Evnt.key.keysym.scancode << std::endl;
_InputManager.PressedKey(Evnt.key.keysym.scancode); }
break;
}
}
}
所以在这段代码中,如果我向上,向下,向左和向右箭头,KEYDOWN正常工作。如果我点击键盘上的任何字母,它只返回代码771.在这里,我在我的开关中进行了测试,包括771。当我点击字母时,它会转到771并打印一个像30445778这样的愚蠢数字。每次重新运行程序时,这个数字都会改变。男人在这里发生了什么?!?请帮帮我
答案 0 :(得分:0)
您遇到的问题是在if current == "/":
raise Exception ("Module folder not found")
条件之后额外;
。引用SDL wiki,您的代码应按如下方式编写:
while
请注意while (1) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
/* handle your event here */
}
/* do some other stuff here -- draw your app, etc. */
}
之后没有分号。
但是,尽管您编写的代码没有按照您的意愿执行,但从C ++的角度来看仍然是正确的。
这一行:
while
将进入一个循环,该循环将迭代直到while (SDL_PollEvent(&Evnt));
点返回SDL_PollEvent
,而什么都不做。
之后,您的0
语句将只运行一次,处理上次轮询的事件(忽略其类型)。与此同时,您的switch
语句尚未准备好处理大多数事件类型。