Polish

Zaloguj się / Zarejestruj się 

Witaj. Zarejestruj się jeżeli nie posiadasz jeszcze konta.

Nazwa użytkownika: Hasło: Zapamiętaj mnie

emo TEMAT: Prosty licznik graficzny dla postaci

TEMAT: Prosty licznik graficzny dla postaci 

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ć.
licznik_postaci.jpg

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
[State -2, wywolujacy licznik]
type = Helper
trigger1 = !numhelper(8000)
helpertype = normal
ID = 8000
stateno = 8000
pos = 0,0
ownpal = 1
supermovetime = 65535
pausemovetime = 65535
ignorehitpause =1

Animacje do pliku AIR.
; "Pusta" animacja
[Begin Action 9741]
-1,-1, 0,0, -1

; Cyfra 0 (jak wiadomo, nie musi to byc  koniecznie 8000, ale wazne, zeby kolejne liczby dac w kolejnosci)
[Begin Action 8000]
8000,0, 0,0, 1

; Cyfra 1
[Begin Action 8001]
8000,1, 0,0, 1

; Cyfra 2
[Begin Action 8002]
8000,2, 0,0, 1

; Cyfra 3
[Begin Action 8003]
8000,3, 0,0, 1

; Cyfra 4
[Begin Action 8004]
8000,4, 0,0, 1

; Cyfra 5
[Begin Action 8005]
8000,5, 0,0, 1

; Cyfra 6
[Begin Action 8006]
8000,6, 0,0, 1

; Cyfra 7
[Begin Action 8007]
8000,7, 0,0, 1

; Cyfra 8
[Begin Action 8008]
8000,8, 0,0, 1

; Cyfra 9
[Begin Action 8009]
8000,9, 0,0, 1

; Minus
[Begin Action 8010]
8000,10, 0,0, 1

Przykładowy licznik w helperze.
[Statedef 8000]
ctrl = 0
anim = 9741

[State 0, wartosc do wyswietlania]
type = VarSet
trigger1 = 1
v = 0
value = time

[State 0, minus]
type = Explod
triggerall = Var(0) < 0
trigger1 = TimeMod = 1,0
anim = 8010
pos = ifelse(teamside=1,0,320)+0,0
postype = left
bindtime = -1
removetime = 1
supermove
pausemove
ontop = 1
ownpal = 1

[State 0, jednosci]
type = Explod
trigger1 = TimeMod = 1,0
anim = 8000 + abs( ( Var(0) - (floor(Var(0)/10) * 10) )  )
pos = ifelse(teamside=1,0,320)+100,0
postype = left
bindtime = -1
removetime = 1
supermove
pausemove
ontop = 1
ownpal = 1

[State 0, dziesiatki]
type = Explod
trigger1 = TimeMod = 1,0
anim = 8000 + abs( ( floor(Var(0)/10) - (floor(Var(0)/100) * 10) )  )
pos = ifelse(teamside=1,0,320)+75,0
postype = left
bindtime = -1
removetime = 1
supermove
pausemove
ontop = 1
ownpal = 1

[State 0, setki]
type = Explod
trigger1 = TimeMod = 1,0
anim = 8000 + abs( ( floor(Var(0)/100) - (floor(Var(0)/1000) * 10) ) )
pos = ifelse(teamside=1,0,320)+50,0
postype = left
bindtime = -1
removetime = 1
supermove
pausemove
ontop = 1
ownpal = 1

[State 0, tysiace]
type = Explod
trigger1 = TimeMod = 1,0
anim = 8000 + abs( ( floor(Var(0)/1000) - (floor(Var(0)/10000) * 10) ) )
pos = ifelse(teamside=1,0,320)+25,0
postype = left
bindtime = -1
removetime = 1
supermove
pausemove
ontop = 1
ownpal = 1

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.

emo TEMAT: Prosty licznik graficzny dla postaci