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

[SDL] gdzie nie można wejść ?

Ostatnio zmodyfikowano 2010-11-13 18:20
Autor Wiadomość
mesajah
Temat założony przez niniejszego użytkownika
[SDL] gdzie nie można wejść ?
» 2010-11-13 08:07:02
Jak zrobić taki kod w SDL :
Postać sobie idzie i żeby nie mogła wchodzić w ścianę.(ani poza ekran)

PS: Jak odświeżyc ekran ( usunąć obrazki z menu ) ?
P-23939
F90M
» 2010-11-13 08:27:29
P-23940
mesajah
Temat założony przez niniejszego użytkownika
» 2010-11-13 08:39:10
Jak odświeżyc ekran ( usunąć obrazki z menu ) ?

Masz te tutki po polsku ?
P-23942
F90M
» 2010-11-13 09:03:19
Jak odświeżyc ekran ( usunąć obrazki z menu ) ?
Powierzchnie aktualizujesz funkcją SDL_Flip(). Musisz po prostu wczytać i wyświetlić menu ze wszystkimi obrazkami, później zrobić to samo tylko bez obrazków.

Masz te tutki po polsku ?
Zawsze daje po polsku jeśli znajdę.
P-23943
mesajah
Temat założony przez niniejszego użytkownika
» 2010-11-13 09:37:19
Co do odświeżania ekranu to nic nie daje mam takie menu :


Start ( jak nacisniemy to chce żeby włączała się funkcja ruch ale menu też znikało )
Wyjscie

a to kod mój :
C/C++
#include <SDL.h>
SDL_Surface * ekran = NULL;
SDL_Surface * ludek = NULL;
SDL_Surface * start = NULL;
SDL_Surface * przycisk = NULL;
SDL_Rect start2;
SDL_Surface * wyjscie2 = NULL;
SDL_Rect wyjscie3;
SDL_Event zdarzenie;
SDL_Rect LudekDestination;
SDL_Rect przyciskDane;
SDL_Rect przyciskCel;
SDL_Rect startDane;
SDL_Rect startCel;
int x;
int y;
int myszkaX, myszkaY;
bool wyjscie = false;


int ruch()
{
    SDL_Flip( ekran );
    ludek = SDL_LoadBMP( "obraz.bmp" );
    if( zdarzenie.type == SDL_KEYDOWN )
    {
        switch( zdarzenie.key.keysym.sym )
        {
        case SDLK_RIGHT:
            x++;
           
           
            break;
        case SDLK_LEFT:
            x--;
           
           
            break;
        case SDLK_UP:
            y--;
           
           
            break;
        case SDLK_DOWN:
            y++;
           
            break;
        }
    }
    return 0;
}

int menu()
{
    start = SDL_LoadBMP( "start.bmp" );
    wyjscie2 = SDL_LoadBMP( "exit.bmp" );
    start2.x = 200;
    start2.y = 100;
    start2.w = ekran->w;
    start2.h = ekran->h;
    wyjscie3.x = 210;
    wyjscie3.y = 150;
    wyjscie3.w = ekran->w;
    wyjscie3.h = ekran->h;
   
    przyciskDane.w = 220;
    przyciskDane.h = 46;
    przyciskCel.x = 210;
    przyciskCel.y = 150;
    startDane.w = 220;
    startDane.h = 46;
    startCel.x = 200;
    startCel.y = 100;
   
    SDL_BlitSurface( start, NULL, ekran, & start2 );
    SDL_BlitSurface( wyjscie2, NULL, ekran, & wyjscie3 );
    SDL_BlitSurface( przycisk, & przyciskDane, ekran, & przyciskCel );
   
    if( zdarzenie.type == SDL_MOUSEMOTION )
    {
        myszkaX = zdarzenie.motion.x;
        myszkaY = zdarzenie.motion.y;
    }
    if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
    {
        if( zdarzenie.button.button == SDL_BUTTON_LEFT &&
        ( myszkaX >= przyciskCel.x && myszkaX <=
        przyciskCel.x + przyciskDane.w ) &&( myszkaY >=
        przyciskCel.y && myszkaY <= przyciskCel.y +
        przyciskDane.h ) )
        {
            SDL_FreeSurface( ludek );
           
            wyjscie = true;
        }
        if( zdarzenie.button.button == SDL_BUTTON_LEFT &&
        ( myszkaX >= startCel.x && myszkaX <=
        startCel.x + startDane.w ) &&( myszkaY >=
        startCel.y && myszkaY <= startCel.y +
        startDane.h ) )
        {
           
            SDL_Flip( ekran );
           
            ruch();
        }
    }
    return 0;
    SDL_Flip( ekran );
}

int main( int argc, char * args[] )
{
    ekran = SDL_SetVideoMode( 640, 480, 32, SDL_FULLSCREEN );
   
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
           
            menu();
           
        }
        LudekDestination.x = x;
        LudekDestination.y = y;
        SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
        SDL_Flip( ekran );
    }
   
    SDL_Quit();
    return 0;
}
P-23944
F90M
SDL_FreeSurface( obraz );
» 2010-11-13 09:58:47
Jeśli dobrze widzę to w menu masz dwie powierzchnie: "start" i "wyjscie2", przy wychodzeniu z menu musisz je usunąć za pomocą funkcji SDL_FreeSurface().
P-23945
mesajah
Temat założony przez niniejszego użytkownika
» 2010-11-13 10:04:02
klikam start to miga i się znowu pojawia a kod łap :
C/C++
#include <SDL.h>
SDL_Surface * ekran = NULL;
SDL_Surface * ludek = NULL;
SDL_Surface * start = NULL;
SDL_Surface * przycisk = NULL;
SDL_Surface * mapa = NULL;
SDL_Rect start2;
SDL_Surface * wyjscie2 = NULL;
SDL_Rect wyjscie3;
SDL_Event zdarzenie;
SDL_Rect LudekDestination;
SDL_Rect przyciskDane;
SDL_Rect przyciskCel;
SDL_Rect startDane;
SDL_Rect startCel;
int x;
int y;
int myszkaX, myszkaY;
bool wyjscie = false;


int ruch()
{
    SDL_FreeSurface( start );
    SDL_FreeSurface( wyjscie2 );
   
    if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
    {
        if( zdarzenie.button.button == SDL_BUTTON_LEFT &&
        ( myszkaX >= przyciskCel.x && myszkaX <=
        przyciskCel.x + przyciskDane.w ) &&( myszkaY >=
        przyciskCel.y && myszkaY <= przyciskCel.y +
        przyciskDane.h ) )
        {
           
        }
        if( zdarzenie.button.button == SDL_BUTTON_LEFT &&
        ( myszkaX >= startCel.x && myszkaX <=
        startCel.x + startDane.w ) &&( myszkaY >=
        startCel.y && myszkaY <= startCel.y +
        startDane.h ) )
        {
        }
    }
    SDL_Flip( ekran );
    start = NULL;
    wyjscie2 = NULL;
    SDL_Flip( ekran );
    mapa = SDL_LoadBMP( "mapa.bmp" );
    SDL_BlitSurface( mapa, NULL, ekran, NULL );
    ludek = SDL_LoadBMP( "obraz.bmp" );
    LudekDestination.x = x;
    LudekDestination.y = y;
    SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
    if( zdarzenie.type == SDL_KEYDOWN )
    {
        switch( zdarzenie.key.keysym.sym )
        {
        case SDLK_RIGHT:
            x++;
           
           
            break;
        case SDLK_LEFT:
            x--;
           
           
            break;
        case SDLK_UP:
            y--;
           
           
            break;
        case SDLK_DOWN:
            y++;
           
            break;
        }
    }
    return 0;
}

int menu()
{
    start = SDL_LoadBMP( "start.bmp" );
    wyjscie2 = SDL_LoadBMP( "exit.bmp" );
    start2.x = 200;
    start2.y = 100;
    start2.w = ekran->w;
    start2.h = ekran->h;
    wyjscie3.x = 210;
    wyjscie3.y = 150;
    wyjscie3.w = ekran->w;
    wyjscie3.h = ekran->h;
   
    przyciskDane.w = 220;
    przyciskDane.h = 46;
    przyciskCel.x = 210;
    przyciskCel.y = 150;
    startDane.w = 220;
    startDane.h = 46;
    startCel.x = 200;
    startCel.y = 100;
   
    SDL_BlitSurface( start, NULL, ekran, & start2 );
    SDL_BlitSurface( wyjscie2, NULL, ekran, & wyjscie3 );
    SDL_BlitSurface( przycisk, & przyciskDane, ekran, & przyciskCel );
   
    if( zdarzenie.type == SDL_MOUSEMOTION )
    {
        myszkaX = zdarzenie.motion.x;
        myszkaY = zdarzenie.motion.y;
    }
    if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
    {
        if( zdarzenie.button.button == SDL_BUTTON_LEFT &&
        ( myszkaX >= przyciskCel.x && myszkaX <=
        przyciskCel.x + przyciskDane.w ) &&( myszkaY >=
        przyciskCel.y && myszkaY <= przyciskCel.y +
        przyciskDane.h ) )
        {
            SDL_FreeSurface( ludek );
           
            wyjscie = true;
        }
        if( zdarzenie.button.button == SDL_BUTTON_LEFT &&
        ( myszkaX >= startCel.x && myszkaX <=
        startCel.x + startDane.w ) &&( myszkaY >=
        startCel.y && myszkaY <= startCel.y +
        startDane.h ) )
        {
           
            ruch();
        }
    }
    return 0;
    SDL_Flip( ekran );
    SDL_FreeSurface( start );
    SDL_FreeSurface( wyjscie2 );
}

int main( int argc, char * args[] )
{
    ekran = SDL_SetVideoMode( 640, 480, 32, SDL_FULLSCREEN );
   
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
           
            menu();
            SDL_FreeSurface( start );
            SDL_FreeSurface( wyjscie2 );
           
        }
       
       
        SDL_Flip( ekran );
    }
   
    SDL_Quit();
    return 0;
}
P-23947
F90M
» 2010-11-13 10:54:46
C/C++
return 0;
SDL_Flip( ekran );
SDL_FreeSurface( start );
SDL_FreeSurface( wyjscie2 );
Możesz mi wytłumaczyć co próbujesz osiągnąć takim wklejaniem kodu, byle jak i byle gdzie? Trzy ostatnie linijki w życiu się nie wykonają.
P-23949
« 1 » 2
  Strona 1 z 2 Następna strona