cp-nilsen Skrevet 31. mars 2006 Del Skrevet 31. mars 2006 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
Klette Skrevet 31. mars 2006 Del Skrevet 31. mars 2006 (endret) Nei, det skal ikke være noe slikt innebygget.. Men paste litt kode, så kan vi jo se på den.. Har du sjekket om det skjer i isolerte eksempler med sdl forresten? Endret 31. mars 2006 av Klette Lenke til kommentar
cp-nilsen Skrevet 31. mars 2006 Forfatter Del Skrevet 31. mars 2006 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
cp-nilsen Skrevet 31. mars 2006 Forfatter Del Skrevet 31. mars 2006 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 Lenke til kommentar
Klette Skrevet 31. mars 2006 Del Skrevet 31. mars 2006 Prøv med SDL_FillRect( screen, NULL, SDL_MapRGB( screen->format, 0, 0, 0 ) ) ; for å cleare Lenke til kommentar
cp-nilsen Skrevet 31. mars 2006 Forfatter Del Skrevet 31. mars 2006 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
Klette Skrevet 31. mars 2006 Del Skrevet 31. mars 2006 Vel, den må jo lese mer data ved bmp-bilder fra disk... Tror ikke det er sdl som er problemet her.. Lenke til kommentar
genstian Skrevet 31. mars 2006 Del Skrevet 31. mars 2006 Prøv og bruk png bilder. Lenke til kommentar
Dead_Rabbit Skrevet 1. april 2006 Del Skrevet 1. april 2006 Da blir du vel også nødt til å bruke SDL_image... Lenke til kommentar
☀ ❄ Skrevet 2. april 2006 Del Skrevet 2. april 2006 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
cp-nilsen Skrevet 3. april 2006 Forfatter Del Skrevet 3. april 2006 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå