SDL2_pollevent() Контроллер dpad непрерывного удержания?
Я пытаюсь зарегистрировать нажатия кнопок контроллера /dpad и непрерывное удержание указанных кнопок таким образом, чтобы он непрерывно выплевывал вывод вместо одного нажатия за раз и затем выходил из цикла событий опроса. Прямо сейчас у меня есть небольшой кусок фиктивного кода, который я пытаюсь напечатать в потоке, если я удерживаю кнопку нажатой. Любая помощь в этом вопросе?
while( !quit_program )
{
//Handle events on queue
while( SDL_PollEvent( &e ))
{
//User requests quit
if( e.type == SDL_QUIT )
{
quit_program = true;
}
else if(e.type == SDL_CONTROLLERBUTTONDOWN)
{
count++;
cout<<"button pushed# "<<count<<endl;
}
}
}
1 ответ
Пока вы не получите SDL_CONTROLLERBUTTONUP (для той же кнопки, конечно), вы можете считать кнопку нажатой. Затем для подсчета вы можете сделать что-то вроде этого (для одной кнопки):
bool that_button_pressed{false};
while(!quit_program) {
//Handle events on queue
while(SDL_PollEvent(&e)) {
// User requests quit
if(e.type == SDL_QUIT)
quit_program = true;
if (e.type == SDL_CONTROLLERBUTTONDOWN && e.button == a_button_of_your_choice) {
that_button_pressed = true;
}
if (e.type == SDL_CONTROLLERBUTTONUP && e.button == a_button_of_your_choice) {
that_button_pressed = false;
}
}
if (that_button_pressed) {
count++;
// Print or implement your logic
}
}
Конечно, этот счетчик также будет зависеть от времени вашего цикла. Здесь that_button_pressed будет представлять один из https://wiki.libsdl.org/SDL_GameControllerButton.