I am Lord Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 Ktoś mnie prosił to zrobiłem przykład drzew ruszających się na wietrze. Zasada działania jest bardzo prosta jednak by wiedzieć jak przykład zmodyfikować trzeba posiadać jakąś już wiedzę czym są funkcje trygonometryczne. 1. Siła wiatru jest wyliczana na podstawie okresowej funkcji matematycznej. Taka funkcja może się składać z pojedynczego sinusa czy cosinusa lub jakieś bardziej złożone rzeczy. Ja zrobiłem w tym przykładzie funkcję sin(X*2)*20+sin(X/2)*30. GML (oControler Step) /* zmiana sily wiatru na podstawie jakiejs wymyslonej funkcji trygonometryczniej zalecam experymentowanie z roznymi funkcjami, mozna dodac kolejene sinusy/cosinusy/tangensy itp*/ gSilaWiatru = sin(X*2)*20+sin(X/2)*30; 2. Siła ta zależy jak widać od kąta X więc co stepa ten kąt będzie się zwiększać o jakiś przyrost: GML (oControler Create) // zmienna ktora powoduje zmiany sily wiatru X = 0; wartoscPrzyrostuX = 0.001; GML (oControler Step) // przyrastanie kata funkcji wiatru X += wartoscPrzyrostuX; 3. Mając już wiatr który zmienia okresowo swoją siłę możemy ustalić kąt obrotu gałęziami drzew. By gałęzie drgały tym szybciej i mocniej im silniejszy jest wiatr znowu posłużymy się funkcjami trygonometrzycznymi. Tutaj używam 2 wartości obrotu gałęzi. Aby wprowadzić jakieś zróżnicowanie drgań poszczególnych gałęzi drzewa używam sinusa i cosinusa. Zmienne te są globalne i są wyliczane tylko raz na step dla wszystkich drzew to jest ważne dla optymalizacji bo żadne drzewo nic nie wylicza a od razu zna wynik. GML (oControler Create) globalvar gObrot, gSilaWiatru; gObrot[0] = 0; gObrot[1] = 0; GML (oControler Step) // zeby wprowadzic roznorodnosc jedne glezie beda obracane sinusem a inne cosinusem gObrot[0] = sin(gSilaWiatru); gObrot[1] = cos(gSilaWiatru); 4. Pora na stworzenie drzewa i jego ruchomych gałęzi. Moje drzewo składa się z czubka, 4 gałęzie po środku i 4 gałęzie jeszcze niżej. Gałęzie te różnie reagują na kąt obrotu wyliczanego w stepie oControler. Jedne przyjmują dodatni kat inne ujemy. GML (oDrzewo Draw) // galezie na samym dole tworza uklad krzyza + draw_sprite_ext( sDrzewo, 0, x-48, y, 1, 1, -gObrot[0]*1.4, -1, 0.9 ); draw_sprite_ext( sDrzewo, 1, x+48, y, 1, 1, +gObrot[1]*1.4, -1, 0.9 ); draw_sprite_ext( sDrzewo, 2, x, y+48, 1, 1, -gObrot[0]*1.4, -1, 0.9 ); draw_sprite_ext( sDrzewo, 1, x, y-48, 1, 1, +gObrot[1]*1.4, -1, 0.9 ); // galezie wyzej tworza uklad X draw_sprite_ext( sDrzewo, 0, x-32, y-32, 1, 1, -gObrot[1]*1.9, -1, 0.7 ); draw_sprite_ext( sDrzewo, 1, x+32, y-32, 1, 1, +gObrot[0]*1.9, -1, 0.7 ); draw_sprite_ext( sDrzewo, 2, x-32, y+32, 1, 1, -gObrot[1]*1.9, -1, 0.7 ); draw_sprite_ext( sDrzewo, 1, x+32, y+32, 1, 1, +gObrot[0]*1.9, -1, 0.7 ); // korona draw_sprite_ext( sDrzewo, 0, x, y, 1, 1, gObrot[0]*0.8, -1, 0.7 ); /* galezie sie ruszaja pod dwoma katami gObrot[0] ktory jest sinusem z funkcji wiatru i gObrot[1] ktory jest cosinusem z funkcji wiatru dodatkowo *1.4, *1.9, *0.8 ustala roznorodnosc w predkosci obracania. Tutaj czubek drzewa obraca sie najwolniej a galezie na samym dole najszybciej */ Przykład można pobrać tutaj: Download Zawartoś paczki: .exe, .gm81, .gmres Gmres jest po to by można było sobie odpalić w GM8. Przykład ma dodatkową informację rysującą charakterystykę funkcji wiatru. Pionowa oś to siła wiatru ( im jest stromiej tym mocniej daje ), oś x to czas. Żółta kropka to aktualne miejsce w tej funkcji. EDIT: Dla GM lite bez funkcji draw_sprite_ext() można zrobić drzewa tak: http://wklej.org/id/982758/ jednak będą się inaczej zachowywać Wpadłem jeszcze na połączenie tego wyżej z tym co było wcześniej i wygląda teraz wszystko jeszcze efektowniej :D http://wklej.org/id/982760/ EDIT2: Inny przykład funkcji wiatru gSilaWiatru = sin(X*2)*5+sin(X/2)*30; gdzie przyrost wynosi wartoscPrzyrostuX = 0.01; Wiatr jest bardziej dynamiczny i płynny ale bardziej powtarzalny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 Wielkie dzięki :) Musze sie nauczyc samemu takie kody robic :-\ 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ę