0

我正在尝试注册控制器按钮/ 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;
        }
     }
}
4

1 回答 1

3

在您获得 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 将代表 SDL_GameControllerButton之一

于 2018-05-29T07:24:58.920 回答