Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[sdl]Przyśpieszenie pętli

Ostatnio zmodyfikowano 2011-12-20 22:56
Autor Wiadomość
ly000
Temat założony przez niniejszego użytkownika
[sdl]Przyśpieszenie pętli
» 2011-12-20 19:41:28
Witam, gdy dodałem podwójne buforowanie do mego programu, bitmapy zaczęły się poruszać znacznie wolniej.
Mogę zrobić tak żeby po wciśnięciu klawisza bitmapa poruszała się o 2 pixele a nie o jeden, ale wtedy straci na płynności.
Jaki jest sposób, aby to przyśpieszyć?
P-45958
SeaMonster131
» 2011-12-20 20:07:15
Daj kod.
P-45962
akwes
» 2011-12-20 20:15:27
Używasz timerów?

Bo wygląda na to że nie.
P-45964
ly000
Temat założony przez niniejszego użytkownika
» 2011-12-20 21:59:55
Nie używam timerów, nie wiedziałem że w sdl one potrafią również przyśpieszać ;o
Szukałem na google, i znalazłem jedynie SDL_Delay(10); ;/
Mógłby mnie ktoś nakierować?

Oraz mój kod, w sumie to tylko lekko zmodyfikowany kod z kursu:

C/C++
#include <SDL.h>








SDL_Surface * ekran = NULL;
SDL_Surface * cos = NULL;

SDL_Surface * tlo = NULL;

//




SDL_Rect LudekDestination;


SDL_Event zdarzenie;





Uint8 * keystate = SDL_GetKeyState( NULL );
int x, y;
bool wyjscie = false;
int main( int argc, char * args[] )
{
   
   
   
    SDL_putenv( "SDL_VIDEO_CENTERED=center" );
    SDL_Init( SDL_INIT_EVERYTHING | SDL_INIT_TIMER );
    ekran = SDL_SetVideoMode( 1600, 800, 32, SDL_NOFRAME | SDL_DOUBLEBUF );
   
    cos = SDL_LoadBMP( "cb.bmp" );
   
    tlo = SDL_LoadBMP( "tlo2.bmp" );
   
   
   
   
   
   
    SDL_SetColorKey( cos, SDL_SRCCOLORKEY, SDL_MapRGB( cos->format, 255, 255, 255 ) );
    while( !wyjscie )
    {
       
       
        if( keystate[ SDLK_RIGHT ] )
        {
            x++;
        }
        if( keystate[ SDLK_DOWN ] )
        {
            y++;
        }
        if( keystate[ SDLK_LEFT ] )
        {
            x--;
        }
        if( keystate[ SDLK_UP ] )
        {
            y--;
        }
       
       
       
       
        SDL_BlitSurface( tlo, NULL, ekran, NULL );
        SDL_BlitSurface( cos, NULL, ekran, & LudekDestination );
       
       
       
       
       
        SDL_PollEvent( & zdarzenie );
        if( zdarzenie.key.keysym.sym == SDLK_ESCAPE ) wyjscie =
             true;
       
       
        LudekDestination.x = x;
        LudekDestination.y = y;
       
        SDL_Flip( ekran );
       
       
       
    }
    SDL_FreeSurface( cos );
    SDL_FreeSurface( tlo );
   
    return 0;
}
P-45978
akwes
» 2011-12-20 22:03:21
delay to nie timer. Timery nie przyspieszają.

Poczytaj o timerach, temat wiele razy poruszany, rozwiąże Twoje problemy. A pisząc to bez timerów robisz to źle. Właściwie to wystarczy jeden timer.
P-45980
ly000
Temat założony przez niniejszego użytkownika
» 2011-12-20 22:21:17
O to chodzi że już szukałem na google i również na forum.

Odpowiedź typu - poszukaj sobie, mnie nie satysfakcjonuję, tak można odpisać na każde pytanie na tym forum.
P-45981
akwes
» 2011-12-20 22:56:23
Ja się pytam, czego szukałeś?


sdl timer
Pierwszy wynik to : http://www.libsdl.org/intro.en/usingtimers.html

W kursie Allegro masz o zasadzie działania timerów: http://cpp0x.pl/kursy/Kurs-Allegro-C++/Timery/70

A tu na forum masz też dobry temat : http://cpp0x.pl/forum/temat/?id=1695

Nie wpisałeś nawet w google "sdl timer", to ja się pytam czego szukałeś?

Dostałeś hasło "timery", należało żebyś sobie przyswoił wiedzę o timerach, która na internecie jak widać jest. O timerach można pisać dużo, i ciężko wymagać od kogoś żeby Ci napisał w poście o timerach wszystko.
P-45982
« 1 »
  Strona 1 z 1