Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL jäätyy

hyrppa95 [25.06.2011 22:22:16]

#

Olen tekemässä peliä SDL:llä ja C++:salla, mutta jostakin syystä peli jäätyy valikossa.

koodi:

//options menu
Uint32 startTime = SDL_GetTicks();

DrawImage(menuBack, screen, 0, 0);
DrawImage(logo, screen, logoX, 0);
DrawImage(optionsImg, screen, menuImgX, menuImgY);
DrawImage(backText, screen, menuImgX, menuImgY);

if(button[SDLK_ESCAPE])
{
   gameState = 1;
}

DrawScreen(screen, h++);

while((SDL_GetTicks() - startTime) < 33);
//options menu ends

Tuo jäätyy mutta minulla on toisessa kohdassa melkein sama koodi mutta se ei jäädy.

Mod. lisäsi kooditagit.

hunajavohveli [26.06.2011 11:43:44]

#

Tuosta on vielä vaikea sanoa, mikä menee vikaan. Ensimmäinen askel on selvittää, missä kohdassa tarkalleen ohjelma jäätyy. Kokeile esimerkiksi tulostaa jotain jokaisen lauseen jälkeen ja katso, mikä tulostuu viimeisenä.

User137 [27.06.2011 10:16:29]

#

Eikö noiden while:n sisällä vois tehdä jotain, esim antaa järjestelmälle aikaa käsitellä eventtejä? Koska jos kone on tarpeeks tehokas niin se saattaa hyvinkin käydä tuon whilen läpi sen satatuhatta-miljoona kertaa joka sekunnin 30:s osan välein.

jack [29.06.2011 19:18:55]

#

Kuten User137:kin jo sanoi, en oikein ymmärrä tuon whilen ideaa. Ilmeisesti olisi tarkoitus että piirrät valikon, jossa escapea painamalla tapahtuu jotain(pelistä poistuminen?). Nyt teet kuitenkin jotain tämän tapaista: alustat näytön, testaat onko escape pohjassa, piirrät näytön näkyviin ja sitten odotat 32 millisekuntia ja jatkat ohjelmassa eteenpäin.

Lahha [30.06.2011 14:38:46]

#

Onko kaikki kuvat ladattu oikein?

Helpoiten selvität missä jäätyminen tapahtuu kun yksi kerrallaan kommentoit rivejä pois kunnes ei enää jäädy.

Tuon while loopin tilalla voisi olla fiksumpaa käyttää SDL_Delay():ta.

Joko ihan vaan

SDL_Delay(33);

taikka

Uint32 frameTime = SDL_GetTicks() - startTime;
if(frameTime < 33)
{
	SDL_Delay(33 - frameTime);
}

Vastaus

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

Tietoa sivustosta