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

[SDL] Problem z rozpoczęciem gry

Ostatnio zmodyfikowano 2010-03-14 13:32
Autor Wiadomość
TheLukon
Temat założony przez niniejszego użytkownika
[SDL] Problem z rozpoczęciem gry
» 2010-03-14 11:04:11
C/C++
#include <SDL.h>

SDL_Surface * ekran = NULL;
SDL_Surface * przycisk = NULL;
SDL_Surface * przycisk_start = NULL;
SDL_Surface * kursor = NULL;
SDL_Surface * ludek = NULL;
SDL_Rect przyciskDane;
SDL_Rect przyciskCel;
SDL_Rect przyciskDane_Start;
SDL_Rect przyciskCel_Start;
SDL_Rect kursorDane;
SDL_Rect kursorCel;
SDL_Event zdarzenie;
SDL_Rect LudekDestination;
Uint8 * keystate = SDL_GetKeyState( NULL );
int myszkaX, myszkaY;
bool wyjscie = false;
bool gra = false;
int x;
int y;

int main( int argc, char * args[] )
{
    SDL_Init( SDL_INIT_EVERYTHING );
    ekran = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE | SDL_DOUBLEBUF );
    przycisk = SDL_LoadBMP( "przycisk.bmp" );
    przycisk_start = SDL_LoadBMP( "przycisk_start.bmp" );
    kursor = SDL_LoadBMP( "kursor.bmp" );
    ludek = SDL_LoadBMP( "ludek.bmp" );
    przyciskDane.w = 200;
    przyciskDane.h = 50;
    przyciskCel.x = 300;
    przyciskCel.y = 400;
    przyciskDane_Start.w = 200;
    przyciskDane_Start.h = 50;
    przyciskCel_Start.x = 300;
    przyciskCel_Start.y = 150;
    kursorDane.x = 0;
    kursorDane.y = 0;
   
    while( !wyjscie )
    {
        SDL_FillRect( ekran, NULL, 0 );
        SDL_ShowCursor( SDL_DISABLE );
        SDL_BlitSurface( przycisk, & przyciskDane, ekran, & przyciskCel );
        SDL_BlitSurface( przycisk_start, & przyciskDane_Start, ekran, & przyciskCel_Start );
        SDL_BlitSurface( kursor, NULL, ekran, & kursorDane );
        SDL_Flip( ekran );
       
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_MOUSEMOTION )
            {
                kursorDane.x = zdarzenie.motion.x;
                kursorDane.y = zdarzenie.motion.y;
            }
            if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
            {
                if( zdarzenie.button.button == SDL_BUTTON_LEFT &&
                ( kursorDane.x >= przyciskCel.x && kursorDane.x <=
                przyciskCel.x + przyciskDane.w ) &&( kursorDane.y >=
                przyciskCel.y && kursorDane.y <= przyciskCel.y +
                przyciskDane.h ) )
                {
                    wyjscie = true;
                }
                if( zdarzenie.button.button == SDL_BUTTON_LEFT &&
                ( kursorDane.x >= przyciskCel_Start.x && kursorDane.x <=
                przyciskCel_Start.x + przyciskDane_Start.w ) &&( kursorDane.y >=
                przyciskCel_Start.y && kursorDane.y <= przyciskCel_Start.y +
                przyciskDane_Start.h ) )
                {
                    SDL_Flip( ekran );
                    if( keystate[ SDLK_RIGHT ] )
                    {
                        x++;
                    }
                    LudekDestination.x = x;
                    SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
                    SDL_Flip( ekran );
                   
                    if( keystate[ SDLK_LEFT ] )
                    {
                        x--;
                    }
                    LudekDestination.x = x;
                    SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
                    SDL_Flip( ekran );
                   
                    if( keystate[ SDLK_DOWN ] )
                    {
                        y++;
                    }
                    LudekDestination.y = y;
                    SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
                    SDL_Flip( ekran );
                   
                    if( keystate[ SDLK_UP ] )
                    {
                        y--;
                    }
                    LudekDestination.y = y;
                    SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
                    SDL_Flip( ekran );
                }
            }
            if( zdarzenie.key.keysym.sym == SDLK_ESCAPE ) wyjscie = true;
           
        }
    }
    SDL_FreeSurface( przycisk );
    SDL_FreeSurface( przycisk_start );
    SDL_FreeSurface( ludek );
    SDL_FreeSurface( kursor );
    return( 0 );
}
I gdy chce włączyć start, na chwilę pojawia mi ludek i znika, a menu nadal jest. Jak rozwiazać ten problem?
P-15002
malan
» 2010-03-14 13:08:24
Nie znam SDL dobrze, ale błąd chyba polega na tym, że czyścisz ekran i nie odrysowujesz ludka. Sprawdź coś takiego:
C/C++
bool wyswietl_ludka = false; // <= gdzieś na początku...
//... następnie zamiast tego:
// LudekDestination.x = x;
// SDL_BlitSurface(ludek,NULL,ekran,&LudekDestination);
// SDL_Flip(ekran);
// ... daj to:
LudekDestination.x = x;
wyswietl_ludka = true;
C/C++
// potem na początku:
SDL_FillRect( ekran, NULL, 0 );
SDL_ShowCursor( SDL_DISABLE );
SDL_BlitSurface( przycisk, & przyciskDane, ekran, & przyciskCel );
SDL_BlitSurface( przycisk_start, & przyciskDane_Start, ekran, & przyciskCel_Start );
// dodaj:
if( wyswietl_ludka ) SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
//
SDL_BlitSurface( kursor, NULL, ekran, & kursorDane );
SDL_Flip( ekran );
Jeżeli to zadziała to będziemy się martwić kiedy przystać wyświetlać ludka :).
P-15003
TheLukon
Temat założony przez niniejszego użytkownika
» 2010-03-14 13:32:05
Dzięki malan. :D
P-15008
« 1 »
  Strona 1 z 1