Skocz do zawartości

Cień w top down, współrzędna Z(?)


Rekomendowane odpowiedzi

No witam, a ja znowu z tymi granatami.

Zrobiłem lot granatu po zakrzywionej linii, tak jak @Uzjel narysował. Teraz mam zagwozdkę jak zrobić do niego cień. Gdyby to była platformówka, to bym sobie pewnie poradził, ale tu już wchodzi większa matematyka. 

Kod kiedyś ogarnął mi @Konrad-GM i to jest cała mechanika lotu:

CREATE:

ghost_x = x;
ghost_y = y;
target_x = x + lengthdir_x(15+speed, dir) + lengthdir_x(10, dir-90);
target_y = y + lengthdir_y(15+speed, dir) + lengthdir_y(10, dir-90);



start_distance = point_distance(ghost_x, ghost_y, target_x, target_y);


STEP:
 

//  poruszamy obiektem w kierunku celu
var angle = point_direction(ghost_x, ghost_y, target_x, target_y);

var spd = 5;
ghost_x += lengthdir_x(spd, angle);
ghost_y += lengthdir_y(spd, angle);

// liczymy aktualna odleglosc
var distance = point_distance(ghost_x, ghost_y, target_x, target_y);
var angle90 = angle + 90 * image_yscale;

// glowna funkcja przesuniecia
var factor = sin((distance / start_distance) * pi);
var maxlen = sqr(log2(start_distance));

var offx = lengthdir_x(maxlen * factor, angle90);
var offy = lengthdir_y(maxlen * factor, angle90);


// dodajemy przesuniecie do realnej pozyci obiektu
x = ghost_x + offx;
y = ghost_y + offy;




Wynik:


Jakieś nakierowania, pomysły? Znam początkową pozycje granatu, miejsce gdzie wyląduje oraz x/y aktualnej pozycji i nie wiem jak to posklejać, żeby cień rysował się mniej więcej tak: 
image.png.c7a134b743b3a6bfb3f9c9895f783253.png
Problem mam w tym, że granat może lecieć w 360º a nie tylko na boki, w osi X

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

A nie wystarczy rysować cienia na pozycji ghost_x i ghost_y ? Z tego co rozumiem, to jest aktualna pozycja granatu "na podłodze", a jego lewitacja jest uzyskiwana przez dodanie offx i offy.

  • Lubię (+1) 1
Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym tak tego nie robił. Rozbijesz się na wykrywaniu kolizji ze ścianami. Offset powinien nie wpływać na pozycję, a tylko na rysowanie. Podobnie jak w moim najnowszym tutorialu 😎

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Już nie chciałem na to zwracać uwagi, ale ja też bym zamienił ghost_x z x. Dla kolizji ważniejsza będzie pozycja gdzie jest cień, mniej ważne rysowanie. Ewentualnie przy kolizjach będzie trzeba sprawdzać offset jako wysokość, ale wciąż zamiana tych zmiennych ułatwia całość, bo można skorzystać z wbudowanych kolizji, zamiast rzeźbić własny kod.

Odnośnik do komentarza
Udostępnij na innych stronach

Tzn ja już kolizję mam zrobioną. W pierwszej fazie lotu jej nie ma, tak aby można było przerzucić granat nad ścianami. Dopiero przy pierwszym odbiciu kolizja jest włączona i wtedy granat może odbić się od solidu. (cień nie zrobiony, nie tykałem tego jeszcze, tylko patrzyłem czy ogólnie działa)

 

 

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ę
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

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