|
[Fusion] Zegar i czas |
| Autor |
Wiadomość |
Dumper
Kapral
 
Główny edytor: 
Drugi edytor: 
Posty: 34
472 Prestiż
|
Wysłany: 14-04-2017, 17:12 [Fusion] Zegar i czas
|
|
|
| Witajcie. Mam 2 countery- Godziny i minuty. Maksymalna liczba godzin to 24 a minut 60. I chce zrobić tak, gdy "godziny" ma liczbe 24 lub większą, ustaw "godziny" na 0, tak samo z minutami. Tylko sęk w tym, że gdy "godziny" ma liczbę 23 i chcę dodać 4 godziny, to zamiast godziny 3 ustawia się godzina 0. To samo z minutami. Jak to zrobić? |
_________________
 |
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 14-04-2017, 17:31
|
|
|
Jeśli godziny większe lub równe 24 odejmij 24 od godziny.
Analogicznie z minutami. |
|
|
|
 |
Dumper
Kapral
 
Główny edytor: 
Drugi edytor: 
Posty: 34
472 Prestiż
|
Wysłany: 14-04-2017, 17:38
|
|
|
| Próbowałem, nadal ustawia się na 0. |
_________________
 |
|
|
|
 |
Neoqueto
Moderator Akcelerator
 
Główny edytor: 
Drugi edytor: 
Pojedynki: być może
Skype: 
Pomógł: 60 razy Posty: 537
7976 Prestiż
|
Wysłany: 14-04-2017, 19:57
|
|
|
Aby zachować obecne rozwiązanie polecałbym puszczać pętlę tyle razy, ile chcemy dodać godzin (start loop "dodaj-godzine" liczbagodzin times), a w zdarzeniu dodać na górze On loop "dodaj-godzine" + Add 1 to Counter.
Musisz zrozumieć jak program to interpretuje. Każesz programowi ustawiać licznik na 0 za każdym razem, kiedy wartość wyniesie 24 lub więcej. Dodajesz 4 godziny do licznika, który wynosi 23, więc licznik uzyskuje wartość 27, co spełnia warunek "24 lub więcej" i automatycznie ustawia się na zero. Dlatego w tym wypadku musisz robić to pojedynczo po jednej godzinie.
Jeśli nadal nie będzie działać spróbuj dodać do zdarzenia Counter is greater or equal 24 warunek On loop dodaj-godzine na samej górze zdarzenia.
Ogólnie zegary robi się trochę inaczej - zazwyczaj odpowiednio dzieli się sekundy lub milisekundy na godziny i minuty.
Chociaż właściwie sposób Jarla powinien działać - robisz to tak, że kiedy licznik wynosi więcej lub jest równy 24, wtedy odejmij od niego 24. I tym zdarzeniem całkowicie zastępujesz zdarzenie z ustawianiem na 0. |
_________________ Jeśli otrzymałeś pomoc - pamiętaj o przyznaniu punktu Pomógł! |
| Ostatnio zmieniony przez Neoqueto 15-04-2017, 18:39, w całości zmieniany 1 raz |
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 14-04-2017, 20:38
|
|
|
Podejrzewam, że ustawiłeś licznikowi maksymalną wartość na 24.
Więc jak masz 23 i dodajesz 4, to licznik i tak ustawia sobie 24.
Spróbuj ustawić maksymalną wartość licznika na coś dużego. |
|
|
|
 |
msg
Pupogłowy ~~~~~~~~~~~

Główny edytor: 
Drugi edytor: 
Pomógł: 76 razy Posty: 1412
40082 Prestiż
|
Wysłany: 15-04-2017, 11:04
|
|
|
Żeby nie robić kodu makaronowego, z powyższych prawidłowo zadziała tylko rozwiązanie Neo, bo tylko ono przechowuje informację ILE godzin przekazujesz ponad przejście na następną dobę. Warunek "czy przekroczono wartość 24" i ustawianie tego na "0" usuwa tę informację. Można by się pokusić o trochę niezręczne sprawdzenie w tej akcji o ile dodawana zmienna przekracza z obecnym czasem liczbę 24 i to dodanie JEJ do obecnej wartości - wtedy otrzymasz konkretną godzinę:
Czy "obecna wartość godzin + ilość dodanych godzin przekracza 24"? -> ustaw zegar na "obecna wartość godzin + ilość dodanych godzin - 24"
Ale najlepiej takie coś się robi zarembiście skomplikowanym równaniem dzielenia ilości minut na godziny i doby. Wtedy jedyne co cię ogranicza to maksymalna wartość licznika w CF (parę dziewiątek w rządku). Otóż: masz licznik, który zlicza TYLKO minuty (np. godzina 1:23 to 60 minut i 23 minuty, czyli licznik ma 83 minuty). Dzieląc bez reszty 83 przez 60 otrzymasz 1 i reszty 23 właśnie, obie te wartości wpychasz w twój licznik. Dodatkowo gdy licznik przekracza 1440 (60 minut razy 24 godziny) dzielisz wszystko bez reszty jeszcze przez tę wartość i odejmujesz ją, pozbywając się nadmiarowych godzin z kolejnych dni. Działa za każdym razem.
EDIT: Da się to zrobić w klikach, kiedyś zaimplementowałem to, ale licznik zbierał sekundy i rozbijał je na godziny i minuty:
 |
_________________
|
|
|
|
 |
Minty
Stwórczyni omc dr fizyki
 
Główny edytor: 
Drugi edytor: 
Pojedynki: być może
Pomogła: 259 razy Posty: 3447
33795 Prestiż
|
Wysłany: 15-04-2017, 15:48
|
|
|
Ja to zwykle robię zamiast:
Co godzinę -> dodaj 1 do godziny
To:
Co godzinę -> godzina = (godzina + 1) mod 24
I... tak możesz robić dodanie 4 godzin. Po prostu "4" zamiast "1".
| jarlfenrir napisał/a: | | odejmij 24 od godziny. |
To powinno jak najbardziej działać, to nie jest ustawianie na 0. I jeśli tak zrobiłeś Dumper, to też myślę, że licznik ma limit na 24. (To powyżej nigdy nie ustawia niczego na więcej, niż 23, więc też by działało.) |
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 16-04-2017, 09:01
|
|
|
| Sne napisał/a: |
Co godzinę -> godzina = (godzina + 1) mod 24
|
Taki sposób potencjalnie ma taki problem, że nie mamy żadnego zdarzenia, które ewentualnie mogłoby poinformować nas o przekroczeniu 24 godzin.
Tzn. być może ktoś by chciał mieć coś jak:
mam 56 minut
dodaj 10 minut
wynik to 66 minut
i kolejne zdarzenie zamienia to na 1 godzina w jednym liczniku i 6 minut w drugim.
W sumie podczas pisania wpadł mi do głowy jeszcze jeden pomysł. Zrób licznik czas, w którym zliczasz najmniejszą jednostkę czasu, jaką potrzebujesz. np. sekundy. Dodawanie bądź odejmowanie czasu wykonujesz tylko na tym liczniku.
I wprowadzasz kolejne liczniki ze zdarzeniami always:
set sekundy to czas mod 60
set minuty to (czas / 60) mod 60
set godziny to (czas / (60*60)) mod 24
set dni to czas / (60*60*24)
itp. |
|
|
|
 |
msg
Pupogłowy ~~~~~~~~~~~

Główny edytor: 
Drugi edytor: 
Pomógł: 76 razy Posty: 1412
40082 Prestiż
|
Wysłany: 16-04-2017, 13:36
|
|
|
| jarlfenrir napisał/a: | | Taki sposób potencjalnie ma taki problem, że nie mamy żadnego zdarzenia, które ewentualnie mogłoby poinformować nas o przekroczeniu 24 godzin. |
Jaki problem, jak tam jest 'mod 24', to niby jakim prawem ma to przekroczyć 24?
| jarlfenrir napisał/a: | | W sumie podczas pisania wpadł mi do głowy jeszcze jeden pomysł. Zrób licznik czas, w którym zliczasz najmniejszą jednostkę czasu, jaką potrzebujesz. np. sekundy. Dodawanie bądź odejmowanie czasu wykonujesz tylko na tym liczniku. |
To dokładnie to o czym ja pisałem |
_________________
|
|
|
|
 |
Minty
Stwórczyni omc dr fizyki
 
Główny edytor: 
Drugi edytor: 
Pojedynki: być może
Pomogła: 259 razy Posty: 3447
33795 Prestiż
|
Wysłany: 17-04-2017, 15:34
|
|
|
| jarlfenrir napisał/a: | | które ewentualnie mogłoby poinformować nas o przekroczeniu 24 godzin. |
Mamy, oczywiście. Przed akcją ustawienia godziny ustawiamy zmienną "deltadni" na godziny/24 i możemy albo zrobić akcję zmiany licznika dni, albo jakieś zdarzenie sprawdzające czy ta zmienna jest >0, czy coś tam. Tylko w sumie nie wiem po co. |
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 17-04-2017, 19:44
|
|
|
| Sne napisał/a: | | Tylko w sumie nie wiem po co. | Zakładam, że w jakimś celu ten czas ma być liczony Może bohater w grze ma 3 dni na wykonanie zadania? Nie wiem |
|
|
|
 |
|
|