2015/08/10 19:29
Prosty licznik graficzny dla postaci#72
Jeżeli kiedyś się zastanawiałeś jak zrobić licznik dla postaci który może wyświetlać najróżniejsze wartości jak np. pozycje na osi X, dystans do przeciwnika, czas gry, itd. itd. w lifebarach możesz użyć tego jako licznik dla energii postaci czyli zamiast poziomu 3 dla energii 3000 to pokaże się 3000 i będzie wiadomo ile ma się dokładnie energii itd. itd...
Podam tutaj głównie kierunek myślenia.
Załóżmy ze mamy wyświetlić 4 cyfry np. 0236 itd. i że będziemy pobierać wartość z warunku Var(0) ... zajmijmy się samym wyświetlaniem, jak mamy liczby 0-9 to sprawa prosta wystarczy podać anim = Var(0), ale co jak Var(0) = 15 i więcej ? to co, trzeba by zrobić 10000 animacji dla każdej liczby 0-9999...
Najlepiej byłoby to jakoś zautomatyzować ale jak określić dokładnie jaka cyfra znajduje się pod setkami, pod dziesiątkami itd... najlepszym rozwiązaniem jest podzielić Var(0) przez odpowiednią liczbę np.
dla Var(0) = 12, Var(0)/10 = 1.2 jeżeli weźmiemy część całkowitą z wyniku mamy 1, czyli wiemy ze cyfra dziesiętna to 1...
przyjmijmy że znak [] oznacza część całkowitą z liczby np. [5.8] = 5
ale co z jednostkami dla Var(0) = 12 ? Musimy usunąć dziesiątki czyli wychodzi na to: Var(0) - ([Var(0)/10] * 10) = 12 - ([1.2] * 10) = 12 - 10 = 2
a jak postąpić z większymi liczbami ? Trzeba usuwać podobnie dziesiątki, setki i tysiące jak wyżej... poniższy przykład powinien wszystko wyjaśnić.
Potem to już wystarczy dodać wzór do animacji albo warunku np. dla jedności anim = 8000+( Var(0) - (floor(Var(0)/10) * 10) ) itd itd .... można wywołać helpera i wstawić explody np.
Przykładowe wywołanie Helpera, można dodać np. w StateDef -2
Użyłem ifelse(teamside=1,0,320) po to żeby ukryć licznik dla P2 i był tylko dla P1, wystarczy zmienić wartość dla P2
W Mugenie funkcja zwracająca część całkowitą z liczby to floor(), abs() służy do podania czegoś w stylu wartości bezwzględnej, teamside=1 oznacza ze jesteś P1 a teamside=2 ze jesteś P2, ifelse(sprawdzanie, prawda, fałsz) sprawdza jakieś założenia i może zwrócić jakąś wartość dla prawdy i dla fałszu np.
IfElse( sprawdzam czy X>0, TAK liczba dodatnia, NIE liczba ujemna)
Żeby Explod był cały czas odświeżany używamy czegoś takiego:
[State wyświetlający ....]
type = Explod
triggerall = TimeMod = 1,0 ; wyświetlanie co 1 jednostkę czasu
......
removetime = 1 ; usuwanie Exploda po 1 jednostce czasu
Ostatnio zmieniany: 2015/08/10 19:45 przez ARMOR_CAGE.
Witaj, zarejestruj się lub zaloguj jeżeli chcesz odpisać w temacie.