Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL ja nappulan liian nopea luku

punppis [09.09.2007 19:44:21]

#

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
    }
}

Gaxx [09.09.2007 19:54:48]

#

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.

Metabolix [09.09.2007 20:16:49]

#

Yksi hyvä vaihtoehto olisi hoitaa viestit itse SDL_PollEvents-silmukalla ja reagoida SDL_KEYDOWN-tyyppisiin ilmoituksiin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta