TheMcMaciej Opublikowano 1 Maja 2015 Udostępnij Opublikowano 1 Maja 2015 Witam, Chciałbym się zapytać jak zrobić pasek życia(HP), który będzie podążał za postacią gracza lub za wybranym przeciwnikiem. Znalazłem kod na GMClanie na poruszanie się obiektu za wybranym obiektem i kod na pasek życia, lecz te dwa kody nie współgrają ze sobą. Chciałbym również poprosić o szczegółowe wytłumaczenie który fragment kodu do czego służy, ponieważ też bym chciał się czegoś nauczyć ;) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 1 Maja 2015 Udostępnij Opublikowano 1 Maja 2015 Cześć TheMcMaciej (i witam w klubie głupich czcionek) Prosząc o gotowca, nawet z wyjaśnieniami, nie nauczysz się wcale tak wiele. Tak naprawdę wszystko czego Ci trzeba to znajomość dwóch funkcji i kilku zmiennych. O ile ktoś mnie nie uprzedzi w wyjaśnieniach, w edicie tego posta(lub w następnym poście, jeżeli ktoś po mnie coś napisze) podam Ci wyjaśnienie czego potrzebujesz i jak to wykorzystać. Możesz też mnie dodać na Steam dla (prawdopodobnie) natychmiastowego wyjaśnienia na bierząco: LINK STEAM A i zazwyczaj nie piszę takich uprzejmych postów, więc to Twój szczęśliwy dzień. Edit: To teraz bez głupiej czcionki, żeby było czytelnie: Założę, że ogarniasz podstawową matematykę. Jeżeli nie, to powinieneś się douczyć, bo programowanie to sporo matmy. Najpierw zacznijmy od pojedynczych elementów: Zmienne: x y zdrowie (Twoja zmienan hp czy jakkolwiek ją nazywasz. Staraj się nie korzystać z "health" napisanego małymi literami bo już istnieje zmienna o takiej nazwie, wbudowana w gm i raczej nie będzie działać tak jak tego oczekujesz. ) zdrowie_max (Ile max HP może mieć. To dla wielkości paska) Funkcje: draw_rectangle draw_set_color draw_self Omówienie: Zmienne x i y określają pozycję każdej instancji obiektu na ekranie. Tak, to oś współrzędnych. Z tą różnicą, że tutaj y się zwiększa w dół a nie w górę. GML draw_rectangle(x1,y1,x2,y2,outline)Rysuje na ekranie prostokąt od punktu [x1,y1] do punktu [x2,y2]. Argument "outline" określa, czy ma zrobić tylko "ramkę" tego prostokąta czy go wypełnić. GML draw_set_color(kolor) Zmienia kolor rysowania na konkretny kolor. Kolor można wybrać na wiele różnych sposobów, ale ich tutaj nie opiszę. GML draw_self() Rysuje obiekt na ekranie jak normalnie. Czemu jest więc potrzebny? Jeżeli dodasz do obiektu event Draw automatyczne rysowanie się wyłącza(czyli nie narysuje Ci instancji obiektu jak zwykle, a jedynie wykona to co jest w kodzie). draw_self() jest po to aby narysować dokładnie to co normalnie by się narysowało, gdybyśmy nie zrobili tego eventu Draw. Wykonanie: Kod powinien być wykonany w evencie Draw w obiekcie nad którego głową chcesz mieć pasek zdrowia. Na początku powinniśmy wpisać draw_self(), ponieważ w dalszym ciągu chcemy aby oryginalny sprite postaci nam się wyświetlał. Teraz możemy przejść do faktycznego rysowania paska hp. Ten kod będzie miał dosłownie cztery linie. Bo więcej nie trzeba. draw_set_color(c_green) draw_rectangle(x,y-10,x+(zdrowie/zdrowie_max)*20,y-3,false) draw_set_color(c_black) draw_rectangle(x,y-10,x+20,y-3,true) Dla wytłumaczenia lini: Linia 1: Zmień kolor rysowania na zielony Linia 2: Narysuj wypełniony pasek określonej wielkości (w kolorze zielonym) Linia 3: Zmień kolor rysowania na czarny Linia 4: Narysuj obramowanie Chcesz narysować pasek nad głową postaci, dlatego korzystasz z jej pozycji x i y. Pasek ma się znajdować nad głową, więc odejmujesz 10 aby górna krawędź paska była 10 pikseli nad głową. Oczywiście możesz zmienić jak wysoko jest górna krawędź zmieniając tę liczbę. Jeżeli chodzi o (zdrowie/zdrowie_max)*20 to tutaj jest troszkę matematyki. Dzieląc zdrowie przez zdrowie_max jesteś w stanie stwierdzić ile procent zdrowia gracz posiada(w wartości od 0 do 1). Liczba 20 to długość pełnego paska zdrowia. Czyli jeżeli gracz ma 100 na 100 HP to pasek będzie długości 20 pikseli. Jeżeli będzie miał 80 na 100 HP to pasek będzie długości (80/100)*20 = 0.8*20 = 16 pikseli. Rozumiesz zasadę. Zmieniając tę liczbę zmieniasz długość paska. w y2 ustalasz dolną krawędź, dolna krawędź powinna być niżej od górnej(well, duh), więc odejmujesz od niej mniej niż w y1. Dlatego tak jak w y1 odejmujesz 10 tak w y2 odejmujesz 3. W pierwszym draw_rectangle rysujesz faktyczny pasek zdrowia, drugie draw_rectangle rysuje jedynie czarną ramkę dla paska(dlatego drugi pasek zawsze dodaje maksymalną długość czyli 20. Mam nadzieję, że w tak szczegółowym wyjaśnieniu zapamiętasz te podstawy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMcMaciej Opublikowano 1 Maja 2015 Autor Udostępnij Opublikowano 1 Maja 2015 (i witam w klubie głupich czcionek) To wcale nie było śmieszne. Ani troche. Poziom tego żartu określam na 2/10, a raczej 1/5 bo się skraca. A i zazwyczaj nie piszę takich uprzejmych postów, więc to Twój szczęśliwy dzień. Nie chciałbym wiedzieć jakie posty piszesz kiedy masz złe dni... Możesz też mnie dodać na Steam dla (prawdopodobnie) natychmiastowego wyjaśnienia na bierząco: LINK STEAM Pomyślę nad tym ... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MaxGaming Opublikowano 1 Maja 2015 Udostępnij Opublikowano 1 Maja 2015 To wcale nie było śmieszne. Ani troche. Poziom tego żartu określam na 2/10, a raczej 1/5 bo się skraca. Szczerze to McMaciej Cię zmazał nieźle xD Fakt, że Twój post nic nie wniósł Vader, oprócz tego, że zwyzywałeś, jak już go karcisz to chociaż mu przy okazji pomóż. Nie zgadzam się też, że od razu musi wszystko sam robić. Moje początki w GMie wyglądały tak, że kopiowałem kod, albo używałem gotowców i próbując coś zmienić rozkminiałem co jak działa, co się stanie jak coś zmienie itp.. Poza tym nie wiem o jakim gotowcu mówisz, jedyne co mógłby sam tutaj zrobić to pogrzebać w dokumentacji, ale pewnie by i tak się zniechęcił, bo za wiele by nie zrozumiał, a przeczytałby tony tekstu. Co do Twojego problemu McMaciej - to jeżeli masz kod na pasek życia to w miejsce x i y - pozycji w których rysowany jest pasek wpisz odpowiednio view_xview i view_yview. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 1 Maja 2015 Udostępnij Opublikowano 1 Maja 2015 Mówiłem, że będzie w edicie i jest. A śmiać się mam prawo. I przyznaję, że 2/10 skrócone do 1/5 było dobre. A i jeżeli masz kod na pasek życia to w miejsce x i y - pozycji w których rysowany jest pasek wpisz odpowiednio view_xview i view_yview. Z tego co zrozumiałem, on chce pasek, który będzie "podążał za postacią gracza lub za wybranym przeciwnikiem", więc Twoje rozwiązanie odpada, bo to rozwiązanie do statycznego paska na HUD, co można zrobić w evencie Draw GUI bez funkcji view_* Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMcMaciej Opublikowano 1 Maja 2015 Autor Udostępnij Opublikowano 1 Maja 2015 Wielkie dzięki za pomoc I am vader. Wszystko działa jak należy ;). Cały tekst jest dla mnie zrozumiały oprócz tego: w y2 ustalasz dolną krawędź, dolna krawędź powinna być niżej od górnej(well, duh), więc odejmujesz od niej mniej niż w y1. Dlatego tak jak w y1 odejmujesz 10 tak w y2 odejmujesz 3. Nie za bardzo to rozumiem. A śmiać się mam prawo. Masz dziwne poczucie humoru ;). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 1 Maja 2015 Udostępnij Opublikowano 1 Maja 2015 W draw_rectangle(x1,y1,x2,y2,outline) za pomocą y1 ustalasz wysokość górnej krawędzi paska a za pomocą y2 wysokość dolnej krawędzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMcMaciej Opublikowano 2 Maja 2015 Autor Udostępnij Opublikowano 2 Maja 2015 W draw_rectangle(x1,y1,x2,y2,outline) za pomocą y1 ustalasz wysokość górnej krawędzi paska a za pomocą y2 wysokość dolnej krawędzi. Ok. Wszystko jest już dla mnie jasne. Jakby ktoś chciał z kodu skorzystać to tutaj daje dopracowany przeze mnie kod: W evencie Create: GML global.zdrowie = 100; W evencie Draw: GML draw_self(); draw_set_color(c_gray); draw_rectangle(x,y-12,x+51,y-5,false); if global.zdrowie > 0 { draw_set_color(c_maroon); draw_rectangle(x,y-12,x+(global.zdrowie/100)*51,y-5,false); } draw_set_color(c_black); draw_rectangle(x,y-12,x+51,y-5,true); Pozdrawiam 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ę