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.

Другие вопросы по тегам