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

Allegro Kolizje

Ostatnio zmodyfikowano 2009-04-01 21:50
Autor Wiadomość
krdk
Temat założony przez niniejszego użytkownika
Allegro Kolizje
» 2009-04-01 20:59:04
Witam.

Mam pytanie. Czy jest jakaś funkcja kolizji krótsza niż ta:

C/C++
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;
   
};

Lub ta:

C/C++
bool kolizja( float x1, float x2, float y1, float y2, float s1, float s2, float w1, float w2 )
{
    if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y1 && y2 <= y2 + w2 ) return( true );
   
    return( false );
}


Pisanie tego jest trudne, nudne i czasochłonne.

I jeszcze jedno:
Jak zrobić by postać 1 nie wchodziła na postać 2 mam takie coś:

C/C++
while( speed > 0 && !kolizja( ludek1.x, ludek2.x, ludek1.y, ludek2.y, ludek1.s, ludek2.s, ludek1.w, ludek2.w ) )
{
    //Ruchy postaci
}

Próbowałem robić by po wykryciu kolizji ludek przesuwał się o piksel w przeciwną stronę do postaci z którą koliduje, ale nie wyszło mi :/


P-5219
DejaVu
» 2009-04-01 21:37:06
Pisanie tego jest trudne, nudne i czasochłonne.

1. A kto powiedział, że programowanie nie jest trudne, nie jest nudne i nie jest czasochłonne?
2. Po co Ci jeszcze krótsza wersja kodu na wykrywanie kolizji, skoro te działają (przynajmniej na pewno ta druga)?
3. Wykrywanie kolizji:
C/C++
LudekST ludek1;
LudekST ludek2;
//...
while( !koniec )
{
    LudekST stary1 = ludek1;
    LudekST stary2 = ludek2;
   
    //tu zmiana pozycji ludka, np
    ludek1.x++;
    ludek2.y--;
   
    if( kolizja( ludek1, ludek2 ) )
    {
        ludek1 = stary1;
        ludek2 = stary2;
    } //if
   
} //while

Sposób niezbyt wydajny, jednak na potrzeby małej gry się sprawdzi i jest prosty do zaimplementowania/wdrożenia/napisania.
P-5222
krdk
Temat założony przez niniejszego użytkownika
» 2009-04-01 21:50:55
Wiem. Wiem. Ale jeśli da się prościej to chyba lepiej robić prościej niż się męczyć. Twojego kodu trochę nie rozumiem, ale nie chce mi się już dzisiaj myśleć. Od razu mówię, że nie chcę gotowego kodu. Jutro pomyślę. Muszę się jeszcze pouczyć a jutro wcześnie do szkoły.
P-5224
« 1 »
  Strona 1 z 1