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

[SFML, C++] Sposób na kolizje

Ostatnio zmodyfikowano 2011-08-15 10:33
Autor Wiadomość
RoinarN
Temat założony przez niniejszego użytkownika
[SFML, C++] Sposób na kolizje
» 2011-08-14 15:00:59
Witam.
Dzisiaj zająłem się kolizjami, iii nie bardzo mi to idzie...
Nie mam pojęcia jak to dokładnie zrobić, domyślam się, ale nie wiem dokładnie czy jest to dobry tok myślenia..
A więc, wydaje mi się, że potrzebujemy 2 kwadraty, które chcemy aby testowały tą kolizję, więc wyciągamy z nich środkowy punkt?:
C/C++
kwadrat1.SetCenter( kwadrat1.GetWidth() / 2.0f, kwadrat1.GetHeight() / 2.0f );
kwadrat2.SetCenter( kwadrat2.GetWidth() / 2.0f, kwadrat2.GetHeight() / 2.0f );
i potem muszę zrobić instrukcję warunkową, czy odległość od środka kwadratu1 jest taka sama lub mniejsza do kwadratu2, jak odległość od środka kwadratu1 do krawędzi kwadratu1?
Nie wiem, namieszałem, mógłby mi ktoś to opisać? lub jakieś linki, z dokładnie wytłumaczonym, jak szukałem w google to same do allegro mi wychodziły wyniki -.-
P-39140
kamillo121
» 2011-08-14 15:10:23
Ten temat był już tyle razy wałkowany na forum, że powinien dostać jakieś wyróżnienie. Poszukaj a na 100% coś znajdziesz dla siebie.
Jeżeli mają to być kolizję między kwadratami to możesz sprawdzać np czy jeden kwadrat nachodzi na drugi a jak będziesz chciał obliczyć dokładną długość ile nachodzi kwadrat na drugi to wtedy możesz liczyć według środka kwadratu pierwszego a drugiego.

jak szukałem w google to same do allegro mi wychodziły wyniki

Co z tego, że dla allegro ? algorytm obliczający kolizję nie jest złączony na stałe z biblioteką graficzną.
P-39141
ison
» 2011-08-14 15:28:03
@RoinarN za bardzo namieszałeś z tą kolizją ;)

pierwsze lepsze wyniki w google
http://wiki.gamedev.pl/Kolizje_mi%C4%99dzy_prostok%C4%85tami_na_p%C5%82aszczy%C5%BAnie
http://wls-team.ovh.org/article.php?article=13

Ax1,Ay1 to współrzędne górnego lewego rogu pierwszego prostokąta
Ax2,Ay2 dolnego prawego
Bx1,By1 górnego lewego rogu drugiego prostokąta
Bx2,By2 dolnego prawego
(mniej pisania by było gdyby utworzyć sobie jakąś klasę dla prostokąta, która by przechowywała te współrzędne)
C/C++
inline bool OverlapRect( const int Ax1, const int Ay1, const int Ax2, const int Ay2,
const int Bx1, const int By1, const int Bx2, const int By2 )
{
    return( Ax1 < Bx2 ) &&
    ( Ax2 > Bx1 ) &&
    ( Ay1 < By2 ) &&
    ( Ay2 > By1 );
}
P-39142
RoinarN
Temat założony przez niniejszego użytkownika
» 2011-08-14 20:23:19
@ison, dzięki i takich właśnie wytłumaczeń łopatologicznych czasami potrzebuję..
Ale. Skąd kompilator i komputer będą wiedzieli że x1 y1 to współrzędne wierzchołka??
P-39151
DejaVu
» 2011-08-14 20:58:38
Ale. Skąd kompilator i komputer będą wiedzieli że x1 y1 to współrzędne wierzchołka??
Polecam przerobić najpierw podstawowy kurs programowania skoro zadałeś takie pytanie...
P-39153
ison
» 2011-08-14 21:58:42
@RoinarN to jest funkcja, do której przekazujesz argumenty
np. dla prostokątów (0,0)(5,5) i (2,2)(10,10)
C/C++
...

int main()
{
    if( OverlapRect( 0, 0, 5, 5, 2, 2, 10, 10 ) ) printf( "kolizja\n" );
   
}
P-39161
RoinarN
Temat założony przez niniejszego użytkownika
» 2011-08-15 10:33:33
taaa, wiem, przespałem się z tą myślą i samo jakoś weszło, wczoraj coś no orient byłem....
Ale dzięki
P-39179
« 1 »
  Strona 1 z 1