Gromojar Opublikowano 23 Kwietnia 2014 Udostępnij Opublikowano 23 Kwietnia 2014 Witam, chciałbym zrobić takie łapanie równowagi, jak w grze Tony Hawk Pro Skater, wiecie o co mi chodzi. Te podczas grindu :P Niestety nawet nie wiem, jak się do tego zabrać, a na forum nic nie znalazłem. Mógłby ktoś poratować jakimś przykładem? Z góry dzięki Pozdrawiam, Gromojar Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 Potrzeba Ci 2 zmiennych które będą to kontrolować. Pierwsza to będzie pozycja wskaźnika na... nazwijmy to równoważni. Sama równoważnia będzie w zakresie <-100;100>, czyli wskaźnik trzeba utrzymać pomiędzy -100 a 100. Drugą zmienną będzie siła wskaźnika. Jeżeli wskaźnik zbliża się do końca równoważni to nabiera rozpędu, a jeżeli naciśniemy strzałki w drugą stronę to powoli go wyhamowujemy. GML t+=1//Zmienna która stale rośnie, odpowiada za czas _sila+=sin(t/1000)//Co step dodajemy do siły troszkę sinusa żeby było trochę dynamiki _sila+min(0.9,abs(_wskaźnik/100))*sign(_wskaźnik) /* abs() jest po to aby pozbyć się minusa mnożenie przez sign() jest po to aby przywrócić minus Minusa pozbywamy się tylko na chwilę aby móc poprawnie wykonać funkcję min() która zapewnia żeby moc spadania nie była większa od 1.9 (po zsumowaniu z minusem) dzięki temu zawsze będzie można się uratować ruchami klawiatury: */ if(keyboard_key(vk_left)) { _sila-=2 } if(keyboard_key(vk_right)) { _sila+=2 } _wskaznik+=_sila//przesunięcie wskaźnika if(_wskaznik<-100 or _wskaznik>100) { //Skucha } Przykładu nie sprawdzałem i pisałem z głowy. Wszystko powinno być ok, ale musisz się pobawić liczbami. Ogółem to wprowadziłbym trzecią zmienną która odpowiadałaby za wzrost trudności. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gromojar Opublikowano 24 Kwietnia 2014 Autor Udostępnij Opublikowano 24 Kwietnia 2014 Dziękuję za odpowiedź, niestety jestem trochę zielony w GML, i nie bardzo wiem jak to wszystko poustawiać. Rozumiem, że powyższy kod wklepujemy w step obiektu wskaźnik? I jak zrobić, by sprite "pochylał się" wraz ze wskaźnikiem równowagi? O dużo pytam, ale postawiłem sobie ciężkie zadanie, które jest chyba nie na moje siły, a już tak mam, że jak coś zacznę, to muszę skończyć :D Dzięki za pomoc, i czekam na dalsze wskazówki :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 _wskaznik jest pozycją x na równoważni, gdzie 0 to środek, a boki mają po 100px. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gromojar Opublikowano 24 Kwietnia 2014 Autor Udostępnij Opublikowano 24 Kwietnia 2014 Nic z tego nie rozumiem :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Czarny Ass Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 _wskaznik to zmienna, a kod dajesz do stepu obiektu, który chcesz "balansować". :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gromojar Opublikowano 24 Kwietnia 2014 Autor Udostępnij Opublikowano 24 Kwietnia 2014 "COMPILATION ERROR in code action Error in code at line 4: _sila+min(0.9,abs(_wskaźnik/100))*sign(_wskaźnik) ^ at position 25: Unexpected symbol. " Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Czarny Ass Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 Nie dawaj polskich znaków do kodu. EDIT: Ach, teraz widzę, że to Threef zrobił błąd. W tej linijce masz dwa razy "ź", później już nie ma problemu. ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 Pokombinuj, to nie jest proste zagadnienie, a nawet powiem że średnio zaawansowane. Jeżeli nie wiesz co zrobić z tym kodem to znak że jeszcze nie na to pora. Spróbuj porobić tutoriale. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Czarny Ass Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 Gromojar jak zmieni te dwa znaki, to pewnie zadziała, ale popieram Threefa. Lepiej na początek sobie brać łatwiejsze cele. ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gromojar Opublikowano 24 Kwietnia 2014 Autor Udostępnij Opublikowano 24 Kwietnia 2014 Dzięki za odpowiedzi, teraz znowu mam taki problem, po poradzeniu sobie z problemem przy keyboard_check, mam coś takiego "COMPILATION ERROR in code action Error in code at line 4: _sila+min(0.9,abs(_wskaznik/100))*sign(_wskaznik) ^ at position 7: Assignment operator expected. " Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 Tu powinno być += zamiast +. Pisałem z głowy, ale dziwne że aż tyle błędów narobiłem. :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gromojar Opublikowano 24 Kwietnia 2014 Autor Udostępnij Opublikowano 24 Kwietnia 2014 Teraz chyba ostatni problem, bo już prawie udało Nam się to uruchomić :D A raczej mi :D GML Error in code at line 1: t+=1//Zmienna która stale rośnie, odpowiada za czas ^ at position 1: Unknown variable t Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 W create wstaw t = 0; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gromojar Opublikowano 24 Kwietnia 2014 Autor Udostępnij Opublikowano 24 Kwietnia 2014 Ok, teraz jak w Create wstawiłem: GML t=0; _sila=0; _wskaznik=0; to gra się uruchomiła. Teraz moje KOLEJNE pytanie: Nie ma może jakiegoś przykładu, który by obrazował całą tą równoważnie? Bo co z tego, że gra się uruchamia, skoro nie widzę efektu? (Po przytrzymaniu któregoś z przycisków pokazuje mi się tylko message "przegrałeś", co wcześniej ustawiłem) Tak czy siak BARDZO dziękuję za pomoc, i wiem, że stawiam sobie bardzo ciężkie zadanie, które po tylu latach przerwy w GML jest dla mnie aż nadto przewalone :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 To masz zrobić sobie sam. Narysuj sobie jakiś pasek długości 200px oraz mały sprit wskazujący aktualne położenie. I przesuwaj ten sprit wykorzystując zmienną _wskaznik. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gromojar Opublikowano 24 Kwietnia 2014 Autor Udostępnij Opublikowano 24 Kwietnia 2014 Już sobie poradziłem, ale mam pytanie: Co decyduje o środku równoważni? W sensie kiedy ustawiłem granice wskaźnika na 0, i 2000 ( tak przykładowo ), to kuleczka wskaźnika leci wyłącznie na prawo. Nawet gdy przycisnę ją prawie do końca, to powoli zaczyna rozpędzać się w prawo. Jak zmienić owy środek? ~~ Poradziłem sobie, dziękuje wszystkim za pomoc ! :)) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 GML _sila+=sin(t/1000)//Co step dodajemy do siły troszkę sinusa żeby było trochę dynamiki _wskaznik+=_sila//przesunięcie wskaźnika</span> z tego co widzę, to te 2 linijki powodują przesuwanie w prawo? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Kwietnia 2014 Udostępnij Opublikowano 24 Kwietnia 2014 nie bo sinus później przechodzi na minus i spowrotem na plus. Ale zdaje się że kąt tego sinusa startuje zawsze taki sam więc proponuję przed każdym uruchomieniem tej równowagi dać: t = random_range(-1, 1); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 25 Kwietnia 2014 Udostępnij Opublikowano 25 Kwietnia 2014 Nie możesz ustawić granic 0 i 2000 musisz zrobić -1000 i 1000, bo siła wskaźnika zależy też o jego pozycji. Jak będzie na plusie to będzie go ciągnąć w prawo. Robiąc 0 i 2000 nigdy nie będzie na minusie, a na minusie znosi na lewo. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gromojar Opublikowano 25 Kwietnia 2014 Autor Udostępnij Opublikowano 25 Kwietnia 2014 Do takich samych wniosków właśnie doszedłem. Pobawiłem się liczbami, jak radziłeś, i już wszystko jest w porządku, dzięki za pomoc ! :D 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ę