Feyd Opublikowano 30 Kwietnia 2010 Udostępnij Opublikowano 30 Kwietnia 2010 Witam Chciałbym sprawdzić odległość między dwoma obiektami, leczy gdy używam distance_to_object to nie działa tak jak oczekuje. Sprawdzałem to na dwóch kołach i odległość jaką pokazuje to odległość do krawędzi obiektu (kwadratu) a nie krawędzi sprite (maski). http://img210.imageshack.us/img210/3675/40958288.png Koła są tylko przykładem, obiekt może mieć dowolny kształt. Czy można sprawdzić odległość między dwoma obiektami, ale uwzględniając maskę obiektu ? Chce to wykorzystać, aby sprawdzać odległość od środka wybuchu do krawędzi obiektu, w celu obliczenia poziomu obrażeń. Może idzie to zrobić w jakiś inny sposób ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 30 Kwietnia 2010 Udostępnij Opublikowano 30 Kwietnia 2010 point_distance(x1,y1,x2,y2) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Feyd Opublikowano 30 Kwietnia 2010 Autor Udostępnij Opublikowano 30 Kwietnia 2010 To byłoby proste, ale potrzebne są współrzędne kolizji. Musiałbym mierzyć odległość od środka obiektu A do najbliższego miejsca przecięcia się obiektu A i B. Jak go znaleźć. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bluks Opublikowano 30 Kwietnia 2010 Udostępnij Opublikowano 30 Kwietnia 2010 Od centrum wybuchu do krawędzi obiektu. Zrób że od centrum wybuchu wychodzi linia z wielu obiektów i jest ciągle oddawana. Jeżeli obiekt z niby linii dotknie obiektu(event_colisin) sprawdza ilość kropek z czego wnioskuje dystans do obiektu. W B W- B W-- B W--- B W---- B W----- B W------ B W------- B W--------B W = wybuch - = 1 pkt. odległości B = bohater (jego maska) po dotknięciu przez - B oblicza ich ilość (instance_number(kreska)) A jeżeli jest kołem dystans wybuchu do centrum obiektu który dotyka odjąć grubość obiektu który ma być zniszczony. Edit: Chcesz plik .gmk z przykładem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Feyd Opublikowano 30 Kwietnia 2010 Autor Udostępnij Opublikowano 30 Kwietnia 2010 Hmm w sumie to można i tak, zrobiłem to tak jak zasugerowałeś, w create wybuchu dałem: GML for (i = 1; i <= 32; i=i+1) { if (collision_point( x+i, y, Obiekt, true, false )) { odl = i; break; } } Na razie sprawdza tylko w jednym kierunku, ale nie szkodzi, obiekt z którym sprawdzam kolizje jest mocno spłaszczoną elipsą więc wystarczy, że będę sprawdzał pod odpowiednim kątem tym dalej od środka obiektu. Dzięki za odpowiedzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 1 Maja 2010 Udostępnij Opublikowano 1 Maja 2010 Skoro chodzi o sprawdzanie odległości w celu obliczenia obrażeń, to da się to łatwo zrobić. To działa, gdy wybuch jest równomierny. W akcji wybuchu daj: GML var t; t = id with(o) if(distance_to_point(t.x,t.y) < r) zdr -= (r-(distance_to_point(t.x,t.y)))*(mzdr/r) gdzie: o - obiekt, który otrzyma obrażenia; t - obiekt, który jest wybuchem (a właściwie jego tymczasowo pobrane id); zdr - zmienna należąca do o; jego zdrowie; r - promień wybuchu (np. 150); mzdr - maksymalne zdrowie obiektu o (np. 100). Nie sprawdzałem, czy działa, ale wg moich obliczeń - powinno. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bluks Opublikowano 1 Maja 2010 Udostępnij Opublikowano 1 Maja 2010 Jak ma być kilka to zamiast kresek daj koło w drawie i po kolizji z kołem sprawdź jego średnicę. 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ę