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

SDL Problem z kolizją

Ostatnio zmodyfikowano 2010-02-02 19:51
Autor Wiadomość
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-02-02 17:48:38
Za bardzo mi to nie wychodzi,wiem ,że ci się nie chcę ale mógłbyś dać to do kodu tak żeby w końcu działało? ;]
P-13503
kamillo121
» 2010-02-02 17:55:18
Szczerzę mówiąc to nie dam bo :
 Z twojego kodu wynika for me , że  kulka sterowana jest  z klawiatury ?
 1. Kulka ma latać swobodnie chyba a paletkami masz ruszać ? jak tak to po każdym obrocie pętli musisz zwiększać bądź zmniejszać pozycję kulki w zależności w którą stronę leci ale nie zależnie od tego czy ktoś przyciśnie klawisz
 2. Zależy jak kulkę , odbijesz to tak powinna lecieć , (ale jak na początek można "zakrzywić " lot piłeczki losową liczbą było by ciekawiej xD)
 
 3. Na początku kulka moze mięc np kierunek w lewą stronę czyli np można zrobić zmienną która ma wartości 0(kierunek w lewo) i 1 (kierunek w prawo). Oczywiście zmieniać tę wartość np , jeżeli wykryje kolizję w osi x z paletką , wtedy zmienić kierunek na przeciwny ;]

 Jakbym dał do kodu kolizję to i tak wiele by to nie dało , bo kulka leciała by tylko w jedną stronę a potem by się zatrzymywała po odbiciu od paletki ;]
 
 Chyba , że nie o to chodzi w tej grze ;-]
P-13504
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-02-02 18:02:43
Na zakrzywienie lotu piłki to chyba mam pomysł.
Trudno, może ktoś inny coś wymyśli a ja spróbuje narazie z tym swoim sposobem,ale ogólnie to dzięki,
P-13505
DejaVu
» 2010-02-02 18:48:34
Wpisz w googlach:
site:forum.ddt.pl kolizje
Dostaniesz pełno wyników, ponieważ ten temat był wielokrotnie poruszany. Wszystko w sumie krążyło wokół biblioteki Allegro, jednak to nie jest istotne czym się wyświetla grafikę.
P-13512
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-02-02 19:18:57
Opracowałem sobie własna kolizje ale coś nie działa.
Tu obrazek:
http://img188.imageshack.us/img188/2853/beztytuuox.png
Kolizja jest wtedy gdy poz_y_kuli(tej duzej glownej) > poz_y_kulki1(czyli tej malem wyrzej na paletce ...) i jezeli poz_y_kuli(tej glownej...)< poz_y_kulki2(tej malej na dole paletki)
Te kreski na paletce to obszar gddzie to wyzej powinno byc spelnione.
Ale nie dziala dlaczego?

Przepraszam ze tak napisane ale sie spiesze
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_Event zdarzenie;
SDL_Rect LudekDestination;
SDL_Rect Paletka1Destination;
SDL_Rect Paletka2Destination;
SDL_Rect TloDestination;
SDL_Rect PilkaDestination;
SDL_Rect Kulka1Destination;
SDL_Rect Kulka2Destination;
Uint8 * keystate = SDL_GetKeyState( NULL );

int x = 70, y = 70; //**********PALETKA 1****************
int e = 900, r = 500; //********PALETKA 2****************
int a = 0, s = 0; //*************TŁO***************
int f = 370, g = 170; //*******PILKA***********
int poz_x_kulki1 = 100, poz_y_kulki1 = 250; //***********KULKA 1*********poz_y_kulki1;     i
int poz_x_kulki2 = 100, poz_y_kulki2 = 100; //**********KULKA 2********* k   l
bool wyjscie = 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" );
    //***************************************************************************************************
   
    while( !wyjscie )
    {
       
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_QUIT )
            {
               
                wyjscie = true;
            }
        }
       
       
       
        if( keystate[ SDLK_UP ] )
        {
           
           
            f = f + 37;
           
            r = r - 37;
           
        }
        if( keystate[ SDLK_DOWN ] )
        {
           
            r = r + 27;
        }
        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;
           
        }
        if(( g > poz_y_kulki2 ) &&( g < poz_y_kulki1 ) )
        {
            g = g =- 300;
        }
        //******************************************************************************************
        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;
        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_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_Flip( ekran );
       
    }
   
    SDL_FreeSurface( paletka1 );
    SDL_FreeSurface( paletka2 );
    SDL_FreeSurface( kulka1 );
    SDL_FreeSurface( kulka2 );
    SDL_FreeSurface( tlo );
    SDL_Quit();
    return 0;
}
kolzija
if((g>poz_y_kulki2)&&(g<poz_y_kulki1))
{
g=g=-300;
}
EDIT//////////////
Znaczy musze jeszcze dac zeby sie odbijalo dopiero jak dotknie a nie jak poprostu jest rownolegle z pilka
EDIT//////
Tak patrze na ten kody i w sumie to takie cos jest chyba  niemozliwe xD
if((g>poz_y_kulki2)&&(g<poz_y_kulki1))
{
g=g=-300;
}
P-13515
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-02-02 19:51:00
Działa!!!!!!!!!!!!!!!!!!!!!!!
W końcu mi się udało oczywiście dzięki waszej pomocy dzieki wszystkim temat do zamkniecia :)
P-13516
1 « 2 »
Poprzednia strona Strona 2 z 2