Estou fazendo um jogo simples, e um dos problemas que encontrei é o atraso irritante ao pressionar uma tecla continuamente.
Então, basicamente, quando eu pressiono (por muito tempo), por exemplo Up, meu objeto move 1 unidade para cima, não move (por aproximadamente 1 segundo) e depois move continuamente 1 unidade para cima (sem atrasos).
Atualmente, eu uso isso para mover o objeto (SDL2):
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_UP:
//Move object 1 unit up
break;
//Other unrelated things omitted
}
break;
//Omitted other cases
}
}
O que eu gostaria de ter é remover o atraso, para que o objeto possa se mover imediatamente Upmuito rapidamente. Há alguma maneira de fazer isso?
while key UP is down move 30 units per second
- e por segundo só faz sentido quando você tem um tempo mensurável entre a tecla pressionada e a tecla ativada - geralmente mais de um quadro.Uma maneira alternativa (a abordagem de Josh também é ótima!) Seria configurar um booleano
SDL_KEYDOWN
e possivelmente também ignorar todos os principais eventos repetidos. Isso você pode fazer verificando orepeat
membro do evento principal.Então você pode implementar seu próprio cronômetro, que não precisa ser nada extravagante, e implementar a repetição de teclas. Você pode acionar a ação diretamente do cronômetro ou até gerar um
SDL_KEYDOWN
evento e unificar as soluções.fonte