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?: 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 -.- |
|
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ą. |
|
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%BAniehttp://wls-team.ovh.org/article.php?article=13Ax1,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) 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 ); }
|
|
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?? |
|
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... |
|
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) ...
int main() { if( OverlapRect( 0, 0, 5, 5, 2, 2, 10, 10 ) ) printf( "kolizja\n" ); }
|
|
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 |
|
« 1 » |