SimianVirus7 Opublikowano 27 Lutego 2016 Udostępnij Opublikowano 27 Lutego 2016 Witam. Chce zrobić oczy, które będą podążać za kursorem (myszką: mouse_x, mouse_y). Jak narazie wystarczy mi podpowiedź, jakie funkcje miałbym do tego użyć. Próbowałem z "move_towards" aby oczy podążały za myszką, oraz "place_meeting", aby oczy podążały za kursorem tylko wtedy kiedy dotykają głowy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 27 Lutego 2016 Udostępnij Opublikowano 27 Lutego 2016 Oczy powinny pozostać w pewnej odległości od kursora, ale powinny kierować się w jego kierunku. Funkcja point_direction(x1,y1,x2,y2) da ci kierunek od głowy do kursora Funkcja lengthdir_x(length,direction) zwróci odpowiednią współrzędną wektora o długości length, zaczepionego w punkcie (0,0) i skierowanego w kierunku direction. To samo dla lengthdir_y. Twoim zadaniem jest narysować oczy w pewnej odległości od środka głowy i skierowane w stronę kursora. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 27 Lutego 2016 Udostępnij Opublikowano 27 Lutego 2016 To ja tak tylko tutaj zostawię https://forum.gmclan.org/index.php?showtopic=28090 Wytłumaczenie jak działają lengthdiry po polsku z tego forum. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 28 Lutego 2016 Autor Udostępnij Opublikowano 28 Lutego 2016 Magia, działa :) Szkoda tylko, że efekt uzyskałem poprzez losowe wstawianie liczb i funkcji, więc był to czysty przypadek, że mi się udało. Musze troche poczytać o tych lengthdirach. Tak z ciekawości, często się ich używa ? na przykład do czego ? Kod: GML draw_sprite(sEye,1,x+lengthdir_x(5,point_direction(self.x,self.y,mouse_x,mouse_y)),y+lengthdir_y(5,point_direction(self.x,self.y,mouse_x,mouse_y))) Efekt: Zastrzeżenia ? PS: Zapomniałbym podziękować ^^, a więc, dziękuje :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 28 Lutego 2016 Udostępnij Opublikowano 28 Lutego 2016 lengthdir_x(len,dir) := len*dcos(dir) lengthdir_y(len,dir) := -len*dsin(dir) W dużych grach takie coś jest bezużyteczne, bo funkcje sin i cos są bardzo wymagające pod kątem mocy obliczeniowej(*), zamiast tego używa się wektorów do obliczania takich rzeczy. Na tym trzeba się niestety trochę znać. Lengthdiry są w porządku, jeżeli nie zależy ci na wydajności, a chcesz uzyskać efekt szybko. (*)Mam na myśli, że jeżeli co klatkę używasz funkcji sin(x) tysiące razy, to rzeczywiście jest to dużo mniej wydajne od stosowania wektorów, natomiast jesli używasz tych funkcji, powiedzmy, 20-30 razy na klatkę, to nic złego się nie dzieje. Po prostu żeby było wiadomo, że dla małych projektów lengthdiry są spoko, a dla dużych są be. Lengthdiry są wykorzystywane do parametryzacji pewnych krzywych, np. okręgu (czyli tego, co zrobiłeś), a to ma trochę zastosowań, np: -obliczenie wektora prędkości dla pocisku, który ma być skierowany w kierunku pewnego punktu; -umieszczanie obiektów w stałej odległości od pewnego głównego obiektu, ale w zmiennym kierunku (mniej więcej to, co u ciebie) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 28 Lutego 2016 Udostępnij Opublikowano 28 Lutego 2016 Z takich praktycznych zastosowań, to na pewno to, że jak strzelasz to pocisk tworzy się nie od postaci, a od końca lufy. Jeśli będziesz korzystał z różnych draw_line() itd. Osobiście korzystam z nich bardzo często. Albo jak masz dwa oddzielnie obiekty które mają być do siebie "sklejone", to lengthdiry się mogą przydać. Zapamiętaj tylko, że lengthdir_x(dlugosc_linii, obrot_linii); (tak teraz patrzę, napisałem prawie to samo co Amaterasu, ale mniej fachowym językiem) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 28 Lutego 2016 Autor Udostępnij Opublikowano 28 Lutego 2016 dla małych projektów lengthdiry są spoko, a dla dużych są be. Chyba najbardziej zapadło mi w pamięć :D . Albo jak masz dwa oddzielnie obiekty które mają być do siebie "sklejone", to lengthdiry się mogą przydać. Gdzieś to widziałem w przykładach i chyba zaczne tego używać, bo jak narazie, nie mam jakiś gigantycznych projektów. Dzięki za wyjaśnienia i pomoc, zawsze chciałem coś takiego zrobić i wkońcu mi się udało :P 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ę