Kun mulla on SDL:llä tehty kiihdytyspelin alku, niin siinä on hieman ongelmaa. Esimerkiksi välilyönnistä kun painaa, niin vaihteen arvo nousee yhdellä. Kuitenkin kun ajan ohjelmaa, niin ei sormeni kuitenkaan pysy koneen tahdissa mukana. Toisinsanoen kun näpäytän sitä välilyöntiä, niin vaihde menee 0 -> 3, eli silmukka menee sinä aikana kolme kertaa läpi kun painan tuota välilyöntiä. Millä saisin toteutettua esimerkiksi seuraavan:
silmukka { jos nappula alhaalla { vaihdetaan vaihdetta; } nappiylos(nappula); //nostetaan nappula väkisin ylös, ettei vaihde vaihdu kuin kerran }
tai
silmukka { jos nappula alhaalla { vaihdetaan vaihdetta; } niin kauan kuin nappula on alhaalla { odotetaan 1ms; //loopataan niin kauan kun nappula on alhaalla } }
Tässä käyttämäni menetelmä.
bool exit = false; bool space; Uint8* keyboard; while(!exit) { SDL_PumpEvents(); keyboard = SDL_GetKeystate(NULL); // Jos space-nappia painentaan, eikä sitä ole ennestää painettu if(keyboard[SDLK_SPACE] && !space) { VaihdaVaihde(); space = true; } // Palautetaan space-nappi ylös if(!keyboard[SDLK_SPACE]) space = false; }
Toki painetut napit on hyvä laittaa taulukkoon vähän isommissa projecteissa.
Yksi hyvä vaihtoehto olisi hoitaa viestit itse SDL_PollEvents-silmukalla ja reagoida SDL_KEYDOWN-tyyppisiin ilmoituksiin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.