Gå til innhold

Anbefalte innlegg

Driver å leker litt med SDL igjen, og for å komme litt inn i det igjen lager jeg et lite snake spill. Dette går ganske tregt, oppdateres kanskje 4-5 ganger i sekundet, som er alt for lite.

Det virker forøvrig ikke som at det er koden som er for "treg", da farten er helt konstant, uavhengig av hvor mange elementer det er på brettet.

 

Er det en innebygd "begrensning" i SDL for at FPS ikke skal løpe ut av kontroll?

Hvordan kan jeg evt. fikse dette? Bruker SDL_HWSURFACE og DOUBLEBUF bare så det er sagt. Kjører Ubuntu med nvidia-driver installert.

Lenke til kommentar
Videoannonse
Annonse

Blir vel litt mye å paste alle filene, men kan paste main-loop ihvertfall, selv om du kanskje ikke får så mye av det..

 

while(!done) 
{
 SDL_Event event;
 while ( SDL_PollEvent(&event) )
 {
   	if ( event.type == SDL_QUIT )  {  done = 1;  }
   	if ( event.type == SDL_KEYDOWN )
   	{
       if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
   	}
 }

 //Get Input
 keys = SDL_GetKeyState(NULL);
 if ( keys[SDLK_UP] ) { player1.changeDir('w'); }
 if ( keys[SDLK_DOWN] ) { player1.changeDir('s'); }
 if ( keys[SDLK_LEFT] ) { player1.changeDir('a'); }
 if ( keys[SDLK_RIGHT] ) { player1.changeDir('d'); }



 //Draw screen
 drawSurface(back, screen, 0, 0); //clear

 player1.update(screen); //update snake
 food1.update(screen); //update food

 SDL_Flip(screen); //update screen
   	}

Lenke til kommentar

ok, testet en veldig komprimert en nå, og det gikk endel fortere ja, men ikke så fort som det burde allikevel, kanskje rundt 10fps.

 

Kom plutselig på at jeg har en surface "back" som kun er helt svart som jeg bruker for å tømme skjermen. Det bør vel være en bedre metode for dette, for det tar vel en del ressurser :p

Lenke til kommentar

Topp, den funka fint og speedet opp til rundt 8fps, men det er fremdeles litt for lite.. bruker midlertidig BMP-bilder, og SDL_LoadBMP. Tenkte det kanskje ikke hadde noe å si da det kun blir lagret som pixler i en surface uansett (loader først til en "temp"-surface, og bruker så SDL_DisplayFormat, men kan dette også gjøre ytelsen dårligere? Vil jeg få noen økning i fps med å bruke f.eks. jpg?

 

Andre ting jeg kan gjøre?

Lenke til kommentar

SDL_DisplayFormat() kan ha en veldig betydelig påvirkning på ytelsen av programmet ditt. Jeg har selv opplevd at en skjermoppdatering har blitt redusert fra å ta omkring ti sekunder til å komme øyeblikkelig, kun takket være SDL_DisplayFormat().

 

Du burde ikke hente inn bildedata o.l. i trange løkker -- hent inn det du trenger for operasjonen du har foran deg, og ha det i minnet til du er ferdig med det.

Lenke til kommentar

Altså; jeg laster kun et par (4-5) bilder på 8x8 pixler helt i oppstarten av programmet.

Laster først til en surface som heter *temp, og deretter kopierer jeg innholdet til en annen surface med "img1 = SDL_DisplayFormat(temp);"

Disse ligger i minnet hele tiden, og jeg laster jo ikke noe mer når programmet har begynt å kjøre. Jeg ville ikke tro det hadde noe å si at bildene er i bmp format da disse lastes i oppstarten og bare lagres som pixler i en surface uansett eller..

Og jeg ville egentlig ikke tro det tar noe mindre tid å laste png bilder da disse må dekodes uansett.. eller?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...