Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: wait_key

Sivun loppuun

Andu [10.04.2006 16:24:41]

#

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?

zacura [10.04.2006 17:55:13]

#

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

Andu [11.04.2006 14:09:33]

#

En tajunnut tuosta mitään. Eikö olisi mitään lyhyttä ja helppoa? Vaikkapa:

SDL_wait_key_RETURN;

vsbs [11.04.2006 14:28:02]

#

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

Heikki [11.04.2006 14:36:50]

#

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.

Andu [11.04.2006 14:47:35]

#

Ohjelma ei jatku vaikka painaisi alaspäin nappulaa.

Megant [11.04.2006 19:57:54]

#

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ä?

Andu [12.04.2006 17:50:07]

#

Nyt ohjelma jatkuu. Ymmärsin tuon väärin. Mutta nyt tuo koodi on silmukassa ja se tekee sen vain kerran. Olisiko siihen vastausta?

vsbs [12.04.2006 17:53:41]

#

siis miten tekee kerran? ai vain kerrankun ohjelma on käynnissä. selvennä vähä tota kysymystä ni vois auttaa.

Andu [12.04.2006 18:01:40]

#

Kun ohjelman avaa se odottaa kerran näppäimen painallusta, mutta seuraavalla kierroksella se ei enää odota.

Megant [12.04.2006 18:14:47]

#

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

Andu [12.04.2006 18:21:31]

#

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.

Megant [12.04.2006 18:25:45]

#

Vaihtuuko tuo done-muuttuja? Loppuuko ohjelma?


Sivun alkuun

Vastaus

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

Tietoa sivustosta