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

[SDL] Zamazywanie tła przy przesuwaniu postaci.

Ostatnio zmodyfikowano 2010-03-10 21:45
Autor Wiadomość
Next
Temat założony przez niniejszego użytkownika
[SDL] Zamazywanie tła przy przesuwaniu postaci.
» 2010-03-08 18:31:06
Ok napisałem taki prosty kod w bibliotece SDL(ruszający się sprite)
C/C++
#include<SDL.h>

SDL_Surface * player = NULL;
SDL_Surface * bg = NULL;
SDL_Surface * screen = NULL;

SDL_Event Event;

Uint8 * keystate = SDL_GetKeyState( NULL );

SDL_Rect playerDest;

const int W = 800;
const int H = 600;
const int BPP = 32;

bool Quit = false;
int x, y;

int main( int argc, char * args[] )
{
    SDL_Init( SDL_INIT_EVERYTHING );
    screen = SDL_SetVideoMode( W, H, BPP, SDL_SWSURFACE );
    bg = SDL_LoadBMP( "bg.bmp" );
    player = SDL_LoadBMP( "player.bmp" );
    Uint32 colorkey = SDL_MapRGB( player->format, 0x00, 0x00, 0x00 );
    SDL_SetColorKey( player, SDL_SRCCOLORKEY, colorkey );
    SDL_BlitSurface( bg, NULL, screen, NULL );
    SDL_Flip( screen );
   
    while( !Quit )
    {
        while( SDL_PollEvent( & Event ) )
        {
            if( Event.type == SDL_QUIT )
            {
                Quit = true;
            }
        }
        if( keystate[ SDLK_RIGHT ] )
        {
            x++;
        }
        if( keystate[ SDLK_LEFT ] )
        {
            x--;
        }
        if( keystate[ SDLK_DOWN ] )
        {
            y++;
        }
        if( keystate[ SDLK_UP ] )
        {
            y--;
        }
        playerDest.x = x;
        playerDest.y = y;
        SDL_BlitSurface( player, NULL, screen, & playerDest );
        SDL_Flip( screen );
    }
   
    SDL_Quit();
    SDL_FreeSurface( bg );
    SDL_FreeSurface( player );
    return 0;
}
i teraz tak jak nim poruszam to ciągle się rysuje jak narysować ten teren od nowa co przebył mam nadzieje że mnie zrozumieliście.

#pixelmaster: zmieniłem tytuł
P-14776
Bartaz
...
» 2010-03-08 18:40:53
Chodzi ci oto ze zamazuje swoim tlem inne tlo?
P-14778
Next
Temat założony przez niniejszego użytkownika
» 2010-03-08 18:51:56
Właśnie tak
P-14780
Bartaz
...
» 2010-03-08 19:00:05
Tez kiedys mialem ten problem ale nie pamietam jak go rozwiazalem znaczy forumowicze poczekaj to moze znajde ten temat na forum.
P-14782
Bartaz
...
» 2010-03-08 19:05:50
P-14783
Bartaz
...
» 2010-03-08 19:07:55
Sory to nie to xD
P-14786
Next
Temat założony przez niniejszego użytkownika
» 2010-03-10 15:36:24
Proszę o pomoc
P-14829
Bartaz
...
» 2010-03-10 16:25:07
Kiedys pisalem sobie Ponga w SDL'u (nie dokonczony...)
i tlo sie nie zamazuje ale sam nie wiem dlaczego masz tu kod moze cos znajdziesz w nim.
C/C++
#include <SDL/SDL.h>
SDL_Surface * paletka1 = NULL;
SDL_Surface * paletka2 = NULL;
SDL_Surface * tlo = NULL;
SDL_Surface * ekran = NULL;
SDL_Surface * pilka = NULL;
SDL_Surface * kulka1 = NULL;
SDL_Surface * kulka2 = NULL;
SDL_Surface * linia = NULL;
SDL_Surface * kul1 = NULL;
SDL_Surface * kul2 = NULL;
SDL_Surface * linja1 = NULL;
SDL_Rect LudekDestination;
SDL_Rect Paletka1Destination;
SDL_Rect Paletka2Destination;
SDL_Rect TloDestination;
SDL_Rect PilkaDestination;
SDL_Rect Kulka1Destination;
SDL_Rect Kulka2Destination;
SDL_Rect LiniaDestination;
SDL_Rect Kul1Destination;
SDL_Rect Kul2Destination;
SDL_Rect Linja1Destination;
SDL_Event zdarzenie;
Uint8 * keystate = SDL_GetKeyState( NULL );

int x = 70, y = 70; //**********PALETKA 1****************
int e = 900, r = 500; //********PALETKA 2****************
int a = 0, s = 0; //*************TŁO***************
int f = 327, g = 300; //*******PILKA***********
int poz_x_kulki1 = 100, poz_y_kulki1 = 250; //***********KULKA 1*********poz_y_kulki1;    
int poz_x_kulki2 = 100, poz_y_kulki2 = 100; //*********KULKA 2*********  
int poz_x_linia = 130, poz_y_linia = 50; //************LINIA***********
int poz_x_kul1 = 930, poz_y_kul1 = 530; //************KUL 1*************
int poz_x_kul2 = 930, poz_y_kul2 = 670; //************KUL 2*****************
int poz_x_linia1 = 900, poz_y_linia1 = 70; //**********LINJA 1**********************
bool wyjscie = false;
bool kolizja = false;
bool kolizja1 = false;
void kol()
{
   
    if((( g > poz_y_kulki2 ) &&( g < poz_y_kulki1 ) &&( f < poz_x_linia ) ) )
    {
        f = f + 70;
       
    }
   
   
   
   
   
   
   
    if((( g > poz_y_kul1 ) &&( g < poz_y_kul2 ) &&( f > poz_x_linia1 ) ) )
    {
        f = f - 70;
    }
   
};
int main( int argc, char * args[] )
{
   
    ekran = SDL_SetVideoMode( 1027, 768, 32, SDL_SWSURFACE );
    tlo = SDL_LoadBMP( "Grafika/Tlo.bmp" );
    paletka1 = SDL_LoadBMP( "Grafika/Paletka1.bmp" );
    paletka2 = SDL_LoadBMP( "Grafika/Paletka2.bmp" );
    pilka = SDL_LoadBMP( "Grafika/pilka.bmp" );
    kulka1 = SDL_LoadBMP( "Grafika/kulka1.bmp" );
    kulka2 = SDL_LoadBMP( "Grafika/kulka2.bmp" );
    linia = SDL_LoadBMP( "Grafika/linia.bmp" );
    kul1 = SDL_LoadBMP( "Grafika/kul1.bmp" );
    kul2 = SDL_LoadBMP( "Grafika/kul2.bmp" );
    linja1 = SDL_LoadBMP( "Grafika/linia1.bmp" );
    //***************************************************************************************************
   
   
    //********************************************************************************************************
    SDL_SetColorKey( paletka1, SDL_SRCCOLORKEY, SDL_MapRGB( paletka1->format, 255, 0, 255 ) );
    SDL_SetColorKey( paletka2, SDL_SRCCOLORKEY, SDL_MapRGB( paletka2->format, 255, 0, 255 ) );
    SDL_SetColorKey( pilka, SDL_SRCCOLORKEY, SDL_MapRGB( pilka->format, 255, 0, 255 ) );
    SDL_SetColorKey( linia, SDL_SRCCOLORKEY, SDL_MapRGB( linia->format, 255, 0, 255 ) );
    SDL_SetColorKey( kulka1, SDL_SRCCOLORKEY, SDL_MapRGB( kulka1->format, 255, 0, 255 ) );
    SDL_SetColorKey( kulka2, SDL_SRCCOLORKEY, SDL_MapRGB( kulka2->format, 255, 0, 255 ) );
    //********************************************************************************************************
   
   
   
    while( !wyjscie )
    {
        f = f - 17;
        kol();
       
       
       
        while( SDL_PollEvent( & zdarzenie ) )
        {
           
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
        }
       
        if( keystate[ SDLK_UP ] )
        {
           
           
            poz_y_kul1 = poz_y_kul1 - 30;
            poz_y_kul2 = poz_y_kul2 - 30;
            r = r - 30;
           
           
        }
        if( keystate[ SDLK_DOWN ] )
        {
           
            r = r + 30;
            poz_y_kul1 = poz_y_kul1 + 30;
            poz_y_kul2 = poz_y_kul2 + 30;
        }
        if( keystate[ SDLK_w ] )
        {
           
            y = y - 37;
            poz_y_kulki2 = poz_y_kulki2 - 37;
            poz_y_kulki1 = poz_y_kulki1 - 37;
           
        }
        if( keystate[ SDLK_s ] )
        {
            y = y + 37;
            poz_y_kulki2 = poz_y_kulki2 + 37;
            poz_y_kulki1 = poz_y_kulki1 + 37;
           
        }
       
       
        //****************************************************************************************************************
        Paletka1Destination.x = x;
        Paletka1Destination.y = y;
       
        Paletka2Destination.x = e;
        Paletka2Destination.y = r;
       
        TloDestination.x = a;
        TloDestination.y = s;
       
        PilkaDestination.x = f;
        PilkaDestination.y = g;
       
        Kulka2Destination.x = poz_x_kulki2;
        Kulka2Destination.y = poz_y_kulki2;
       
        Kulka1Destination.x = poz_x_kulki1;
        Kulka1Destination.y = poz_y_kulki1;
       
        LiniaDestination.x = poz_x_linia;
        LiniaDestination.y = poz_y_linia;
       
        Kul1Destination.x = poz_x_kul1;
        Kul1Destination.y = poz_y_kul1;
       
        Kul2Destination.x = poz_x_kul2;
        Kul2Destination.y = poz_y_kul2;
       
        Linja1Destination.x = poz_x_linia1;
        Linja1Destination.y = poz_y_linia1;
       
       
        SDL_BlitSurface( tlo, NULL, ekran, & TloDestination );
        SDL_BlitSurface( paletka1, NULL, ekran, & Paletka1Destination );
        SDL_BlitSurface( paletka2, NULL, ekran, & Paletka2Destination );
        SDL_BlitSurface( pilka, NULL, ekran, & PilkaDestination );
        SDL_BlitSurface( kulka2, NULL, ekran, & Kulka2Destination );
        SDL_BlitSurface( kulka1, NULL, ekran, & Kulka1Destination );
        SDL_BlitSurface( linia, NULL, ekran, & LiniaDestination );
        SDL_BlitSurface( kul1, NULL, ekran, & Kul1Destination );
        SDL_BlitSurface( kul2, NULL, ekran, & Kul2Destination );
        SDL_BlitSurface( linja1, NULL, ekran, & Linja1Destination );
       
        SDL_Flip( ekran );
        SDL_Flip( paletka1 );
        SDL_Flip( paletka2 );
        SDL_Flip( pilka );
       
       
    }
    SDL_FreeSurface( paletka1 );
    SDL_FreeSurface( paletka2 );
    SDL_FreeSurface( kulka1 );
    SDL_FreeSurface( kulka2 );
    SDL_FreeSurface( tlo );
    SDL_FreeSurface( linia );
    SDL_FreeSurface( linja1 );
    SDL_Quit();
    return 0;
}
P-14830
« 1 » 2
  Strona 1 z 2 Następna strona