Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem][C++] SDL problem z podwojnym buforowaniem


Rekomendowane odpowiedzi

Opublikowano

Tak jak w temacie napotkałem na swoj pierwszy problem w bibliotece SDL a mianowicie chodzi tu o podwójne buforowanie próbowałem to robic samemu jak i szukać rozwiązań w necie ale jest ich mało.

 

Oto mój kod:

 

#include <SDL/SDL.h>

SDL_Surface* ekran = NULL;
SDL_Surface* tlo = NULL;
SDL_Surface* ludek = NULL;
SDL_Surface* bufor = NULL;

SDL_Event zdarzenie;

SDL_Rect ruch_ludka;

float x=500;
float y=200;

bool wyjscie = false;

int main( int argc, char * args[] )
{
    if(SDL_Init(SDL_INIT_EVERYTHING))
    {
        SDL_Quit;
    }
    else{
    ekran = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    tlo = SDL_DisplayFormat(SDL_LoadBMP("obraz1.bmp"));
    ludek = SDL_DisplayFormat(SDL_LoadBMP("postac1.bmp"));

    SDL_SetColorKey(ludek, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(ludek->format, 0, 0 ,0));

    SDL_BlitSurface(tlo, NULL, ekran, NULL);
    SDL_Flip(ekran);

    while(!wyjscie)
    {
        while(SDL_PollEvent(&zdarzenie))
        {
            if(zdarzenie.type == SDL_QUIT)
            {
                wyjscie = true;
            }
            if(zdarzenie.type == SDL_KEYDOWN)
            {
                switch(zdarzenie.key.keysym.sym)
                {

                case SDLK_RIGHT:

                    if(x>=843){x-=0;}
                    else{x+=10;}
                    break;

                case SDLK_LEFT:

                    if(x<=0){x+=0;}
                    else{x-=10;}
                    break;

                case SDLK_UP:

                    if(y>=0){y-=10;}
                    else{y+=0;}
                    break;

                case SDLK_DOWN:

                    if(y<=386){y+=0;}
                    else{y-=10;}
                    y+=10;
                    break;
                }
            }



        }
        ruch_ludka.x = x;
        ruch_ludka.y = y;
        SDL_BlitSurface(ludek, NULL, ekran, &ruch_ludka);
        SDL_Flip(ekran);
    }


    SDL_FreeSurface(tlo);
    SDL_FreeSurface(ludek);
    SDL_Quit;

    }
    return 0;
}

 

Z góry dzięki za pomoc

 

ywug.jpg



Smacznego

Weteran
Opublikowano

Musisz czyścić bufor przed wyrenderowaniem każdej klatki.

Czyli po prostu wstaw SDL_FillRect(ekran,NULL, 0) w głównej pętli.

Opublikowano

Dzięki za odpowiedzi ale nic niepomogło topiero po godzinnym kminieniu okazało sie że 2 razy dawalem tlo na ekran przed i po zdarzeniu.

Więc przed pętlą while wystarczyło skasować Blitsurfeca i flipa.

ywug.jpg



Smacznego

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...