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
» 2010-11-13 13:59:37
rozwiązałem problem w 50%,
bo jeśli jest SDL_MOUSEBUTTONDOWN to znaczy przytrzymanie ( SDL_MOUSEBUTTONDOWN - SDL_PrzyciskMyszyWcisnięty),
a ja chcę , żeby działo się coś po kliknięciu , a nie przytrzymaniu.
HELP
P-23961
DejaVu
» 2010-11-13 14:05:15
Problem był wielokrotnie rozwiązany na forum dla biblioteki allegro.
P-23962
mesajah
Temat założony przez niniejszego użytkownika
» 2010-11-13 14:09:57
1. nie znam allegro
2. moge prosić o link ?
P-23963
DejaVu
» 2010-11-13 14:57:38
P-23967
mesajah
Temat założony przez niniejszego użytkownika
» 2010-11-13 15:30:53
już sam rozwiązałem , ale po naciśnięciu "start" ładnie pojawia się mapka i postać ( gwiazdka z painta ) . I tutaj stoi problem nie działa ruch , a oto kod :
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 charx;
int chary;
int myszkaX, myszkaY;
bool wyjscie = false;


int ruch()
{
   
    SDL_Flip( ekran );
    mapa = SDL_LoadBMP( "mapa.bmp" );
    SDL_BlitSurface( mapa, NULL, ekran, NULL );
    ludek = SDL_LoadBMP( "obraz.bmp" );
   
    if( zdarzenie.type == SDL_KEYDOWN )
    {
        switch( zdarzenie.key.keysym.sym )
        {
        case SDLK_RIGHT:
            charx++;
            break;
           
        case SDLK_LEFT:
            charx--;
            break;
           
        case SDLK_UP:
            chary--;
            break;
           
        case SDLK_DOWN:
            chary++;
            break;
        case SDLK_ESCAPE:
            wyjscie = true;
            break;
        }
    }
    LudekDestination.x = charx;
    LudekDestination.y = chary;
    SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
    SDL_Flip( ekran );
    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_FreeSurface( start );
            SDL_FreeSurface( wyjscie2 );
            SDL_Flip( ekran );
            ruch();
        }
    }
    SDL_Flip( ekran );
   
    return 0;
   
}

int main( int argc, char * args[] )
{
   
    ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
   
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.key.keysym.sym == SDLK_ESCAPE )
            {
                wyjscie = true;
            }
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
           
           
            menu();
           
            SDL_FreeSurface( start );
            SDL_FreeSurface( wyjscie2 );
           
           
           
        }
       
       
        SDL_Flip( ekran );
    }
   
    SDL_Quit();
    return 0;
}
Błagam ... pomóżcie ...
P-23969
DejaVu
» 2010-11-13 18:01:58
Jak ma działać ruch skoro wywołujesz funkcję ruch w totalnie bezsensownym miejscu...
P-23978
mesajah
Temat założony przez niniejszego użytkownika
» 2010-11-13 18:11:41
to gdzie użyć ?
P-23979
DejaVu
» 2010-11-13 18:20:06
W zasadzie widząc ten kod to mogę jedynie doradzić abyś zaczął pisać grę od nowa. Ładujesz bitmapy co chwilę do pamięci zamiast zrobić to raz. Gra powinna być zbudowana w sposób następujący:
1) Wczytanie zasobów
2) Pętla główna gry
Pętla główna gry powinna być zbudowana:
1) Sterowanie
2) Wyświetlanie obiektów na buforze
3) Wyswietlanie bufora na ekran
Sterowanie:
1) Żadnych pętli
2) Tylko ify lub switche
3) W sterowaniu zmienia się stany obiektów, takie jak np. pozycja obiektu, obecnie zaznaczony obiekt itp
Wyświetlanie obiektów na buforze:
1) Rysujesz wszystkie obiekty
2) Obiekty rysowane są w zależności od stanu zmiennych danego obiektu
3) Nie pobierasz żadnych iformacji w tej sekcji o wciskanych klawiszach, współrzędnych myszki itp.
P-23980
1 « 2 »
Poprzednia strona Strona 2 z 2