[SDL] Sprite zakrywa tło podczas poruszania
Ostatnio zmodyfikowano 2012-07-09 17:06
Wasilek Temat założony przez niniejszego użytkownika |
[SDL] Sprite zakrywa tło podczas poruszania » 2012-07-09 02:05:47 Mój problem można zauważyć na tych dwóch screenach: 1. http://imageshack.us/photo/my-images/705/przedw.jpg/2. http://imageshack.us/photo/my-images/502/39019188.jpg/Chodzi właśnie o to, że postać zostawia za sobą ślady. Udało mi się to wyeliminować odświeżając tło za każdym razem, jednak to zżera masę FPS'ów i powoduje przenikanie obrazka. #include <SDL.h>
SDL_Surface * ekran = NULL; SDL_Surface * ludek = NULL; SDL_Surface * obraz = NULL;
SDL_Event zdarzenie; SDL_Rect LudekDestination; Uint8 * keystate = SDL_GetKeyState( NULL );
float x; float y; bool wyjscie = false;
int main( int argc, char * args[] ) { ekran = SDL_SetVideoMode( 640, 480, 32, SDL_DOUBLEBUF ); obraz = SDL_LoadBMP( "obraz1.bmp" ); SDL_BlitSurface( obraz, NULL, ekran, NULL ); SDL_Flip( ekran ); ludek = SDL_LoadBMP( "ludek.bmp" ); SDL_SetColorKey( ludek, SDL_SRCCOLORKEY, SDL_MapRGB( ludek->format, 255, 255, 255 ) ); while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } } if( keystate[ SDLK_RIGHT ] ) { x = x + 0.1; } if( keystate[ SDLK_LEFT ] ) { x = x - 0.1; } if( keystate[ SDLK_UP ] ) { y = y - 0.1; } if( keystate[ SDLK_DOWN ] ) { y = y + 0.1; } LudekDestination.x = x; LudekDestination.y = y; SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination ); SDL_Flip( ekran ); } SDL_FreeSurface( ludek ); SDL_Quit(); return 0; } |
|
Wasilek Temat założony przez niniejszego użytkownika |
» 2012-07-09 17:06:02 Ok udało mi się naprawić ten problem ... wystarczyło trochę zmienić odświeżanie :) #include <SDL.h> #include <time.h>
SDL_Surface * ekran = NULL; SDL_Surface * ludek = NULL; SDL_Surface * obraz = NULL;
SDL_Event zdarzenie; SDL_Rect LudekDestination; Uint8 * keystate = SDL_GetKeyState( NULL );
float x; float y; bool wyjscie = false;
int main( int argc, char * args[] ) { SDL_Init( SDL_INIT_EVERYTHING ); ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE | SDL_DOUBLEBUF ); obraz = SDL_LoadBMP( "obraz.bmp" ); ludek = SDL_LoadBMP( "ludek.bmp" ); SDL_SetColorKey( ludek, SDL_SRCCOLORKEY, SDL_MapRGB( ludek->format, 255, 255, 255 ) ); while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } } if( keystate[ SDLK_RIGHT ] ) { x = x + 0.1; } if( keystate[ SDLK_LEFT ] ) { x = x - 0.1; } if( keystate[ SDLK_UP ] ) { y = y - 0.1; } if( keystate[ SDLK_DOWN ] ) { y = y + 0.1; } LudekDestination.x = x; LudekDestination.y = y; SDL_BlitSurface( obraz, NULL, ekran, NULL ); SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination ); SDL_Flip( ekran ); SDL_Flip( obraz ); SDL_Flip( ludek ); } SDL_FreeSurface( ludek ); SDL_Quit(); return 0; }
Można zamknąć temat :) |
|
« 1 » |