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.
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ä.
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.
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.
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); }
Aihe on jo aika vanha, joten et voi enää vastata siihen.