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

[SDL] Sprite zakrywa tło podczas poruszania

Ostatnio zmodyfikowano 2012-07-09 17:06
Autor Wiadomość
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.
C/C++
#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;
   
}
P-59724
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 :)

C/C++
#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 :)
P-59747
« 1 »
  Strona 1 z 1