Skocz do zawartości

distance_to_object (obiekt z maską)


Feyd

Rekomendowane odpowiedzi

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

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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...