NukeBoards - Kreatywność przede wszystkim
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  DownloadDownload
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
[Fusion] Zegar i czas
Autor Wiadomość
Dumper 
Kapral


Główny edytor: Fusion 2.5
Drugi edytor: Fusion 2.5 Dev
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: Fusion 2.5
Drugi edytor: TGF2
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: Fusion 2.5
Drugi edytor: Fusion 2.5 Dev
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: Fusion 2.5 Dev
Drugi edytor: MMF2
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: Fusion 2.5
Drugi edytor: TGF2
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: KNP
Drugi edytor: KNP
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:

_________________
:razzugly:
 
     
Minty 
Stwórczyni
omc dr fizyki


Główny edytor: Fusion 2.5 Dev
Drugi edytor: Construct
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: Fusion 2.5
Drugi edytor: TGF2
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: KNP
Drugi edytor: KNP
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 :razzugly:
_________________
:razzugly:
 
     
Minty 
Stwórczyni
omc dr fizyki


Główny edytor: Fusion 2.5 Dev
Drugi edytor: Construct
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: Fusion 2.5
Drugi edytor: TGF2
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 :P
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

PSK Cytaty Klikibaza - kopia wszystkich klików Klikipedia - encyklopedia o tworzeniu gier Discord KlikCzat Zaproszenie Wielkie Muzeum Klikowe

Powered by phpBB modified by Przemo © 2003 phpBB Group