Boro Casso Opublikowano 31 Maja 2010 Udostępnij Opublikowano 31 Maja 2010 Witajcie potrzebuje jakiegoś szybkiego algorytmu sprawdzania kolizji, język programowania jest nie ważny, aby szybko chodził. Ja sobie już go przepisze pod własne potrzeby. Najważniejsze aby przyjmował parametry x,y,szerokość,wysokość dla obu prostokątów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mipo57 Opublikowano 31 Maja 2010 Udostępnij Opublikowano 31 Maja 2010 if ((player.x < rect.x + rect.width/2 + 0.1f) && (player.x > rect.x) && (player.y < rect.y + rect.height/2) && (player.y > rect.y - rect.height/2)) player.x = rect.x + rect.width/2 + 0.1f; if ((player.x > rect.x - rect.width/2 - 0.1f) && (player.x < rect.x) && (player.y < rect.y + rect.height/2) && (player.y > rect.y - rect.height/2)) player.x = rect.x - rect.width/2 - 0.1f; if ((player.y < rect.y + rect.height/2 + 0.1f) && (player.y > rect.y) && (player.x < rect.x + rect.width/2) && (player.x > rect.x - rect.width/2)) player.y = rect.y + rect.height/2 + 0.1f; if ((player.y > rect.y - rect.height/2 - 0.1f) && (player.y < rect.y) && (player.x < rect.x + rect.width/2) && (player.x > rect.x - rect.width/2)) player.y = rect.y - rect.height/2 - 0.1f; kiedyś w jakiejś książce był sam go używałem tyle że dla x,z :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Boro Casso Opublikowano 31 Maja 2010 Autor Udostępnij Opublikowano 31 Maja 2010 @up i to działa? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mipo57 Opublikowano 31 Maja 2010 Udostępnij Opublikowano 31 Maja 2010 Tak. Tyle że player.x musisz odpowiednio zmienić żeby był to prostokąt, a nie punkt, ale to chwilka roboty ;) E: to jest na prostokąty tyle że jedynie zwaca wartość czy wystąpiła kolizja 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; }; * x1 - współrzędna x lewego górnego rogu naszego prostokąta. * y1 - współrzędna y lewego górnego rogu naszego prostokąta. * w1 - wysokość pierwszego prostokąta. * s1 - szerokość pierwszego prostokąta. http://www.easykoder.vot.pl/arty/kolizja jak będę miał czas to go zmieni tak żeby wyliczał pozycje po kolizji Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Boro Casso Opublikowano 31 Maja 2010 Autor Udostępnij Opublikowano 31 Maja 2010 Ten algorytm z easykoder działa dobrze tylko dla 32x32 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mipo57 Opublikowano 31 Maja 2010 Udostępnij Opublikowano 31 Maja 2010 jakim cudem? sprawdza czy wierzchołki prostokąta 2 znajdują się w prostokącie 1... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 31 Maja 2010 Udostępnij Opublikowano 31 Maja 2010 http://www.google.pl/search?client=opera&a...-8&oe=utf-8 trudne? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Boro Casso Opublikowano 1 Czerwca 2010 Autor Udostępnij Opublikowano 1 Czerwca 2010 @up Powiem ci tak, google to i ja mam. Jeżeli wchodzę na forum i PROSZĘ już kogoś o pomoc na nim to naprawdę robię to tylko wtedy jeżeli nie satysfakcjonują mnie odpowiedzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 1 Czerwca 2010 Udostępnij Opublikowano 1 Czerwca 2010 ///jakas struktura/klasa watever struct Rect { int x; int y; int width; int height; }; bool RectanglesIntersect(const Rect& r1, const Rect& r2) { if(r2.x >= r1.x && r2.x <= r1.x + r1.width && r2.y >= r1.y && r2.y <= r1. y + r1.height) return true; if(r2.x + r2.width >= r1.x && r2.x + r2.width <= r1.x + r1.width && r2.y >= r1.y && r2.y <= r1. y + r1.height) return true; if(r2.x + r2.width >= r1.x && r2.x + r2.width <= r1.x + r1.width && r2.y + r2.height >= r1.y && r2.y + r2.height <= r1. y + r1.height) return true; if(r2.x >= r1.x && r2.x <= r1.x + r1.width && r2.y + r2.height >= r1.y && r2.y + r2.height <= r1.y + r1.height) return true; return false; } Coś w tym stylu. Sprawdzasz czy jakikolwiek wierzchołek jednego prostokąta znajduje się w drugim... Nie ma innej hiper-wydajniejszej metody. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 1 Czerwca 2010 Udostępnij Opublikowano 1 Czerwca 2010 Nie ma innej hiper-wydajniejszej metody. Sprawdzenie osi x i y? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 1 Czerwca 2010 Udostępnij Opublikowano 1 Czerwca 2010 hiper Poza tym wnioskuje że autor przeleciał google jak sam mówił i nic mu się nie spodobało. Polece jeszcze ten link http://www.metanetsoftware.com/technique/tutorialA.html @down wiem ze o tym pisales i wlasnie dlatego dalem ten link :) twoj takze spoko Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 1 Czerwca 2010 Udostępnij Opublikowano 1 Czerwca 2010 Polece jeszcze ten link http://www.metanetsoftware.com/technique/tutorialA.html O tym właśnie pisałem przecież(SAT). Znacznie lepszym materiałem jest: http://physics.hardwire.cz/mirror/90_91_Polycolly.zip Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się