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

SDL Kolizja

Ostatnio zmodyfikowano 2009-11-29 13:06
Autor Wiadomość
Bartaz
Temat założony przez niniejszego użytkownika
SDL Kolizja
» 2009-11-28 16:34:09
Witam
Mam pytanie czy jest jakaś funkcja w SDL do kolizji czy trzeba samemu sobie napisać  jak w Allegro?
Jeżeli nie ma to morze mi ktoś podać przykład?
Gdzie indziej czytałem ,że trzeba się pobawić jakoś pixelami ale coś mi nie wychodzi.

I jeszcze jedno chciałem troche grafike poprawić , śscągłem sobie Paintnet zrobiłem "deske" ale w grze nie było jej widac (dałem rozszerzenie bmp).
Why?
P-11869
malan
» 2009-11-28 19:26:25
Mam pytanie czy jest jakaś funkcja w SDL do kolizji czy trzeba samemu sobie napisać  jak w Allegro?
Raczej nie ma - tak jak w allegro - samemu trzeba sobie napisać.
Przykładów na forum jest mnóstwo: site:forum.ddt.pl kolizje

I jeszcze jedno chciałem troche grafike poprawić (...)
To nie koniecznie musi być wina bitmapy, czy Paint.NET-a. Moim zdaniem masz błąd w kodzie ;p.
P.S. Pamiętaj o zasadzie jeden problem == jeden temat.
P-11870
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2009-11-28 19:49:15
Przeczytałem dużo z tamtych postów ale umnie się nie sprawdza zbytnio.
Próbowałem zrobić coś takiego ,że jeżeli pozycja kulki bedzię równa pozycji "deski"
to kolizja ale zabardzo mi to nie działa.Może ma ktoś jakiś pomysł?
P-11872
Bartaz
Temat założony przez niniejszego użytkownika
Koniec..
» 2009-11-28 21:13:33
Pier.... wracam do allegro tam przynajmniej da się coś zrobić.
SDL Śmierdzi...
Dzięki
wszystkim za pomoc...
 
P-11875
Bartaz
Temat założony przez niniejszego użytkownika
!!!
» 2009-11-28 23:07:33
Jednak zostaje przy SDL xD
I teraz tak próbuje zastosować kolizje z allegro do SDL ale coś nie działa o co chodzi?
Kod:
To taki niby Pong ma być.
C/C++
#include <SDL/SDL.h>


int x = 50;
int y = 410;
int f = 790;
int g = 200;
int k = 70;
int l = 370;
int w;
int h;



SDL_Surface * ekran = NULL;
SDL_Surface * ludek = NULL;
SDL_Surface * tlo = NULL;
SDL_Surface * kula = NULL;
int SDL_FillRect( SDL_Surface * dst, SDL_Rect * dstrect, Uint32 color );
SDL_Event zdarzenie;
SDL_Rect LudekDestination;
SDL_Rect TloDestination;
SDL_Rect KulaDestination;

Uint8 * keystate = SDL_GetKeyState( NULL );
bool kolizja( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 )
{
    if( x2 <= x1 + s1 && x2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true;
    else if( x2 <= x1 + s1 && x2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true;
    else if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true;
    else if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true;
    else return false;
   
};
bool wyjscie = false;
int main( int argc, char * args[] )
{
   
    ekran = SDL_SetVideoMode( 900, 700, 32, SDL_SWSURFACE );
   
    ludek = SDL_LoadBMP( "ludek.bmp" );
    tlo = SDL_LoadBMP( "tlo.bmp" );
    kula = SDL_LoadBMP( "kula.bmp" );
   
    while( !wyjscie )
    {
        if( kolizja( tlo->x, tlo->y, tlo->w, tlo->h, kula->x, kula->y, kula->w, kula->h ) == true )
        {
            x = x + 7;
        }
       
       
        SDL_WM_SetCaption( "Pong by Bartaz", NULL );
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_QUIT )
            {
               
                wyjscie = true;
            }
        }
       
        if( keystate[ SDLK_w ] )
        {
            y = y - 7;
        }
        if( keystate[ SDLK_s ] )
        {
            y = y + 7;
        }
        if( keystate[ SDLK_DOWN ] )
        {
            g = g + 7;
        }
        if( keystate[ SDLK_UP ] )
        {
            g = g - 7;
        }
       
       
       
        k = k + 7;
        LudekDestination.x = x;
        LudekDestination.y = y;
        TloDestination.x = f;
        TloDestination.y = g;
        KulaDestination.x = k;
        KulaDestination.y = l;
        SDL_FillRect( ekran, NULL, 0 );
        SDL_BlitSurface( tlo, NULL, ekran, & TloDestination );
        SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
        SDL_BlitSurface( kula, NULL, ekran, & KulaDestination );
        SDL_Flip( ekran );
    }
    SDL_FreeSurface( ludek );
    SDL_FreeSurface( tlo );
    SDL_FreeSurface( kula );
    SDL_Quit();
    return 0;
}
P-11884
malan
» 2009-11-29 00:55:25
Przecież ten kod się nawet nie skompiluje:
46|error: 'struct SDL_Surface' has no member named 'x'|
Poza tym, czy zapis: kula -> w = pozycja kuli ? Na moje to szerokość bitmapy (przynajmniej tak w allegro jest ;p).
Pomijając to wytłumacz mi czemu przesuwasz tło:
SDL_BlitSurface(tlo,NULL,ekran,&TloDestination);
Chyba że tak sobie wymyśliłeś, to zwracam honor ;).

W tym całym 'Pong'-u jeśli dobrze pamiętam to "rakietki" poruszają się tylko gór/dół ? ;> Jeśli tak to z kolizją 'kula-rakietka' nie ma problemu ;p. Sprawdzasz tylko, czy:
(pozycja_kuli_x>=pozycja_rakietki_x &&
pozycja_kuli_x<=pozycja_rakietki_x_+szer) &&
(pozycja_kuli_y<=pozycja_rakietki_y_top && pozycja_kuli_y>=pozycja_rakietki_y_down).

szer - szerokość rakietki.
top - górna krawędź,
down - dolna krawędź.

Jeśli warunek jest spełniony - odbij_piłeczke.
P-11885
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2009-11-29 10:44:04
A jak mam "zaznaczyć" ,że np tam jest lewy górny róg rakietki
Możesz trochę inaczej to wytłumaczyć albo jak by ci się chciało  w co wątpię  to wpisać taką kolizje w ten kod.
Inaczej ,skad mam wiedzieć jaką ma szerokość paletka(głupie pytanie xD).
Czytałem coś o bibliotece "coolision" czy jakoś tak morze ktoś wie o tym coś więcej.
A to:
SDL_BlitSurface(tlo,NULL,ekran,&TloDestination);
To przesuwam bo tło to jedna z rakietek xD
więc rakietka musi się przesuwać.
Aha i jak w SDL WYŚWIETLIĆ TEKST?
P-11889
DejaVu
» 2009-11-29 13:06:43
Aha, a co dzisiaj będzie na obiad?

Jeden temat == jeden problem.

Co do kolizji to na forum istnieje pełno przykładów i wyjaśnień jak uzyskać kolizję. Swego czasu temat naprawdę był ostro maglowany. Wykorzystaj zasoby, które już istnieją na forum, a nie wychodzisz z założenia 'nie rozumiem, wyjaśnijcie mi to indywidualnie'. Dostałeś dużą pulę rozwiązań. No chyba, że 50 tematów to mało...
[google] site:forum.ddt.pl temat kolizja
P-11896
« 1 »
  Strona 1 z 1