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

SDL Kolizja działa tylko raz.

Ostatnio zmodyfikowano 2010-02-06 21:58
Autor Wiadomość
Bartaz
Temat założony przez niniejszego użytkownika
SDL Kolizja działa tylko raz.
» 2010-02-05 21:37:56
Witam mam taki problem,pisze sobie Ponga i mam w nim kolizje tylko ,że robi się
ona tak ,że piłka odbije się od paletki potem odbije się od drugiej ale potem od pierwszej już się nie chce odbić,  chyba coś pomieszałem z zmienna bool ale nie mogę
się dowiedzieć co.
Kod:
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 );


bool wyjscie = false;
bool kolizja = false;
bool kolizja1 = false;
bool f = false;
bool czy = false;
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" );
    //********************************************
   
    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**********************
    //**************************************************
    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;
       
       
        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 );
        if((( g > poz_y_kulki2 ) &&( g < poz_y_kulki1 ) &&( f < poz_x_linia ) ) )
        {
            kolizja = true;
           
        }
       
        if( kolizja == true )
        {
            f = f + 30;
            g = g - 1;
        }
        if((( g > poz_y_kul1 ) &&( g < poz_y_kul2 ) &&( f > poz_x_linia1 ) ) )
        {
            kolizja1 = true;
        }
        if( kolizja1 == true )
        {
            f = f - 30;
        }
    }
   
    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;
}
Kod odpowiedzialny za kolizje:
C/C++
if((( g > poz_y_kulki2 ) &&( g < poz_y_kulki1 ) &&( f < poz_x_linia ) ) )
{
    kolizja = true;
   
}

if( kolizja == true )
{
    f = f + 30;
    g = g - 1;
}
if((( g > poz_y_kul1 ) &&( g < poz_y_kul2 ) &&( f > poz_x_linia1 ) ) )
{
    kolizja1 = true;
}
if( kolizja1 == true )
{
    f = f - 30;
}
Zmienne bool:
C/C++
bool kolizja = false;
bool kolizja1 = false;
P-13577
DejaVu
» 2010-02-06 12:48:16
Wywal zmienne kolizja i kolizja1. Kod z tych if'ów przenieś tam, gdzie masz ustawianie kolizja/kolizja1 na true. Jeśli chcesz koniecznie zachować te zmienne to musisz gdzieś ustawić stan zmiennych na false. Ty tego nie robisz poza miejscem ich utworzenia, a je masz z kolei przed pętlą, więc ustawiasz je de'facto raz i żyją one sobie do 'końca' Twojej gry.
P-13589
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-02-06 21:12:33
Zrobiłem takie coś to robi się tak , że jest kolizja kulka się przesuwa bardzo szybko np +70; a potem wraca znowu na pozycje paletki i tak kilka razy na sekunde...
I ogólnie nie chcę mi się zrobić plik exe jest błąd:
C:\Documents and Settings\ADMIN\Pulpit\Pong by Bartaz\Makefile.win [Build Error]  ["Pong] Error 1
P-13602
DejaVu
» 2010-02-06 21:49:10
1) Temat dotyczy kompilującego się problemu i dostałeś jego przyczynę.
2) Teraz tworzysz nowy problem, do którego po 1. nie ma kodu po 2. błąd jest składniowy, więc nie ma nic wspólnego z tematem i po 3. Twój log nic nikomu nie mówi, ponieważ wkleiłeś informację, że wystąpił błąd, a nie jaki on jest.
P-13604
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-02-06 21:58:33
Teraz to mi poznikały pliki od gry :/chyba mam wirusa xD
P-13606
« 1 »
  Strona 1 z 1