SDL:llä teen ohjelmaa, mutta tuli ongelma. Miten saa niin että ohjelma ei jatku ennen kun jotain näppäintä on painettu? Tai niin, että jotain tiettyä nappia on painettu?
Oletan kieleksi C/C++. Tämä odottaa ESC:n painallusta, lisää näppäinkoodeja ja tietoa SDL_Eventistä löytyy SDL:n dokumentaatiosta.
//SDL alustukset sun muut ... bool quit=false; SDL_Event event; while (!quit) { st = SDL_GetTicks(); if (SDL_PollEvent(&event)>0) if (event.type==SDL_KEYDOWN) if (event.key.keysym.sym==SDLK_ESCAPE) quit = true; }
En tajunnut tuosta mitään. Eikö olisi mitään lyhyttä ja helppoa? Vaikkapa:
SDL_wait_key_RETURN;
SDL_Event t; while(1) { SDL_PollEvent(&t); if(t.type == SDL_KEYDOWN) { break; } }
Pitäis toimii ja vähän lyhyempi pätkä.
Edit:Vaihdoin koko koodin
Tuohon kun pistää vielä while-silmukan loppuun vaikka SDL_Delay(10):n niin prossun käyttö ei ole huipussaan. Erittäin kätevä jos ohjelmasi on esim. ikkunoitu ja haluat antaa käyttäjän käyttää samaan aikaan muita ohjelmia.
Ohjelma ei jatku vaikka painaisi alaspäin nappulaa.
Andu kirjoitti:
En tajunnut tuosta mitään. Eikö olisi mitään lyhyttä ja helppoa? Vaikkapa:
SDL_wait_key_RETURN;
Mikä estää sinua tekemästä omaa funktiota?
Andu kirjoitti:
Ohjelma ei jatku vaikka painaisi alaspäin nappulaa.
Tuosta on perin vaikea sanoa mitään ilman koodiasi.
Näyttäisitkö sitä?
Nyt ohjelma jatkuu. Ymmärsin tuon väärin. Mutta nyt tuo koodi on silmukassa ja se tekee sen vain kerran. Olisiko siihen vastausta?
siis miten tekee kerran? ai vain kerrankun ohjelma on käynnissä. selvennä vähä tota kysymystä ni vois auttaa.
Kun ohjelman avaa se odottaa kerran näppäimen painallusta, mutta seuraavalla kierroksella se ei enää odota.
Tuosta on vieläkin paha sanoa mitään.
Jos esimerkiksi sanot että sinulla on ongelma x, muut eivät tiedä kuin että sinulla on ongelma.
Siispä näytä koodiasi niin voisimme korjata sitä.
Mutta voithan tehdä tämmöisen funktion:
void Odota_Nappainta() { SDL_Event event; while(1) { SDL_PollEvent(&event); if(event.type == SDL_KEYDOWN)//voit laittaa tähän tarkistamaan myös tietyn näppäimen break; } }
SDL_Event t; while(done == 0) { SDL_PollEvent(&t); if(t.type == SDL_KEYDOWN) { break; } }
Tuossa ja loppu koodi on melkein suoraan täältä
Edit: Funktio toimi.
Vaihtuuko tuo done-muuttuja? Loppuuko ohjelma?
Aihe on jo aika vanha, joten et voi enää vastata siihen.