Roblox Studio Skript Bedeutung?
Also es ist ein Tag-Nacht-Zyklus von der Toolbox und in der Beschreibung stand, dass dayLength die Tageslänge in Minuten bedeutet, auch wenn es im Spiel eher 3 Minuten sind. Im Moment bin ich so am Rumprobieren, aber weiß nicht mal richtig, was das alles bedeutet. Ich werde in fett danebenschreiben, was ich denke, was das bedeutet. Könnte evtl. jemand drüberschauen, was ich falsch interpretiert habe, vor Allem mit den Zahlen?
local dayLength = 12
Ein Tag/ Eine Nacht dauern jeweils 12 Minuten (Steht das für 12 Fakestunden?)
local cycleTime = dayLength*60
Ähmm.. Wie lang eine Sekunde (Fakeminute) dauert?
local minutesInADay = 24*60
Wieviel Sekunden eine Minute hat (Fakeminuten pro Fakestunde)
local lighting = game:GetService("Lighting")
Ob es heller oder dunkler ist
local startTime = tick() - (lighting:getMinutesAfterMidnight() / minutesInADay)*cycleTime
Zeitpunkt, an dem Tag/Nacht beginnt, bei dem lighting:get MinutesAfterMidnight, ist das so, dass automatisch die Zeit erkannt wird, jenachdem wo das Licht ist? Und wenn man das durch Minutesinaday teilt, weiß man, wie viel Prozent des Tages schon rum ist, heißt das, das müsste null sein wenn der Tag beginnt? Und wieso multipliziert man mit CycleTime, ist das nicht so und so 0 am Tagesanfang? Also der Tag beginnt anscheinend an Mitternacht, oder? Und was bedeutet das Tick?
local endTime = startTime + cycleTime
Wenn ein Zyklus endet, also die Startzeit plus Tagessekungen(Fakeminuten). Wieso nimmt man da nicht dayLength? Oder Zählen da die Sekunden, nicht Minuten?
local timeRatio = minutesInADay / cycleTime
Gekürzt 24/12, also wie gekürzt der Tag ist im Vergleich?? Oder so?
if dayLength == 0 then
dayLength = 1
end
repeat
Wenn es wahr ist, dass der Tag/ die Nacht begonnen hat, ähm, dann soll die Zeit um eins weiter gehen (naja)
local currentTime = tick()
Die aktuelle Zeit kann man dran fest machen indem die Zeit jede Sekunde um einen Tick vorwärtsgeht (oder so)
if currentTime > endTime then
startTime = endTime
endTime = startTime + cycleTime
end
Wenn die aktuelle Zeit das Ende des Tages erreicht hat, beginnt der Anfang der Nacht, und andersrum, und dann wird noch gesagt, dass die Endzeit der Zeitpunkt nach einem Tageszyklus ist
lighting:setMinutesAfterMidnight((currentTime - startTime)*timeRatio)
wait(1/15)
until false
Und keine Ahnung, was hier passiert, ich dachte Minuten nach mitternacht ist klar, wieso ist danach noch was in der Klammer?
1 Antwort
Allgemein soll das Skript einen Tag-/Nacht-Wechsel implementieren.
local dayLength = 12
local cycleTime = dayLength * 60
Hierbei geht man zunächst davon aus, dass die Hellphase eines Tags 12h (Spielweltzeit) dauert. Eine Stunde in der Spielwelt entspricht einer Minute in der Realzeit. Die cycleTime speichert die Anzahl an Sekunden, denn dieser Wert wird für spätere Berechnungen (die auf Sekundenbasis laufen) benötigt.
In dieser Zeile:
local lighting = game:GetService("Lighting")
wird der Lighting-Service von Roblox geholt. Über ihn kann die globale Beleuchtung in der Spielwelt gesteuert werden. In der Roblox-Dokumentation findest du noch mehr Informationen zu diesem Service (unter anderem auch eine einfachere Version deines obigen Skripts).
Um nun die aktuelle Tageszeit zu ermitteln, wird die erste Berechnung fällig.
local startTime = tick() - (lighting:getMinutesAfterMidnight() / minutesInADay) * cycleTime
Die tick-Funktion liefert die Anzahl an Sekunden, die seit dem 1.1.1970 (Unixzeit) vergangen sind. Die getMinutesAfterMidnight-Funktion wiederum gibt die Anzahl an Minuten nach Mitternacht (Spielwelt) zurück. Diese Minutenanzahl muss mit cycleTime multipliziert werden, da es ja um eine Berechnung in Sekunden geht.
local endTime = startTime + cycleTime
Die Endzeit verweist ebenso auf einen Wert in Sekunden. Also die aktuelle Zeit addiert mit einem Tageszyklus.
local timeRatio = minutesInADay / cycleTime
Die timeRatio wiederum enthält das Verhältnis zwischen Minute (Spielweltzeit) und einem halben Tageszyklus (Hell-/Dunkelphase) in Sekunden (Realzeit). Das heißt, wie viele Sekunden in der Realzeit einer Minute in der Spielweltzeit entsprechen.
Die folgende Prüfung:
if dayLength == 0 then
dayLength = 1
end
ist redundant, da der Fall nie eintreten wird.
Die Schleife ist schließlich dazu da, die Zyklen abzuzählen. Immer wenn die aktuelle Zeit der Endzeit entspricht, werden Start- und Endzeit aktualisiert. Der Timer des Lighting-Moduls wiederum wird bei jedem Iterationsschritt via setMinutesAfterMidnight aktualisiert (das tut er nicht automatisch). Dafür wird erst die verstrichene Zeit in Sekunden (Echtzeit) ermittelt und diese dann (durch die Multiplikation mit timeRatio) in die Minuten in Spielweltzeit konvertiert.