Warum funktioniert dieser Code nicht vollständig?
Ich habe in Roblox Studios folgenden Code (Lua) geschrieben:
Ich möchte damit erreichen, dass nach einer Sekunde der Wert c um q steigt. Das funktioniert auch. Nur wird der Text des TextLabels nicht jede Sekunde geändert. Ich möchte nämlich, dass der Wert c in Echtzeit in der GUI angezeigt wird (wie er sich verändert). Irgendwo liegt ein Fehler.
Ps: Habe gerade erst mit Coden angefangen.
LG
4 Antworten
Fange doch bitte mit JS oder Python an! Mit Lua kann man mittlerweile nicht mehr so viel mit anfangen(außer Roblox) Hier Erklärt.
Hier einmal dein Code überarbeitet (Das habe ich nicht Programmiert sollte dennoch funktionieren!):
local A = game.Workspace.A
local B = game.Workspace.B
local C = game.Workspace.C
local o = false
local q = 0
local c = 0
A.Touched:Connect(function(D)
q = 1
o = true
end)
B.Touched:Connect(function(E)
q = 2
o = true
end)
C.Touched:Connect(function(F)
q = 3
o = true
end)
while true do
local d = game.StarterGui.ScreenGui.TextLabel
if o == true then
c = c + q
print(c)
else
C = 0
end
wait(1)
d.Text = tostring(c)
end
Im Übrigen ist der Code von oben größtenteils kopiert mit dem Unterschied, dass nun noch ein zusätzlicher Fehler eingebaut wurde. Statt den numerischen Wert von c im else-Fall zu ändern, wird der Workspace geändert.
1) Du änderst in deinem Code die StarterGui, statt der PlayerGui. Ersteres ist ein Replikat von Letzterem, wird aber erst sichtbar, wenn der Spieler zurückgesetzt wird. Ändere also stattdessen den Knoten in der PlayerGui.
2) Da du eine Sekunde je Intervall warten möchtest, wäre es besser, task.wait zu nutzen. Die von dir genutzte wait-Funktion gilt als veraltet und agiert ungenauer.
3) Noch ein wichtiger Rat: Vergib immer eindeutige und aussagekräftige Namen für deine Variablen, Funktionen, etc.. Mit c, q, u.ä. kann niemand etwas anfangen. Du machst es dir ebenso nur schwer, da du dich doch ebenso stets einlesen musst - wofür stand nun gerade d, für was gerade o? Verwechslungen führen schnell zu Fehlern und nach Pausenzeiten ist es aufwendiger, sich wieder einzulesen.
Hier einmal der code überarbeitet für dich
local A = game.Workspace.A
local B = game.Workspace.B
local C = game.Workspace.C
local c = 0
local q = 0
local o = false
A.Touched:Connect(function(D)
q = 1
o = true
end)
B.Touched:Connect(function(E)
q = 2
o = true
end)
C.Touched:Connect(function(F)
q = 1
o = true
end)
while true do
local d = game.StarterGui.ScreenGui.TextLabel
if o == true then
c = c + q
print(c)
o = false -- Reset `o` to false after updating `c`
end
wait(1)
d.Text = tostring(c)
end
Kenne mich absolut null mit Roblox aus deswegen ist es mehr ein raten 🤣
Ich finde es sieht irgendwie komisch aus "d" ist dein Text Feld quasi, aber mir erschließt sich nicht wieso er bei "print (c)" darauf kommen soll das er das in "d" printen soll.
Also ich kann mir vorstellen, das du das "print (c)" ändern musst, aber in was kann ich dir auch nicht sagen kenne halt die Programmier sprache nicht.
Hoffe es ist klar was ich meine, mir erschließt sich halt einfach nicht woher das Programm dort checkt das er "c" quasi in "d" printen soll, das sieht ehr so aus als wenn dein Programm einfach ganz allgemein "c" ausgibt und eben nicht spezifisch in dein Text Label.
Danke für die Antwort!
Der print-Befehl hat nichts mit dem Label zutun. Den nutze ich nur, um sicherzustellen, dass der Wert "c" auch verändert wird.
Für das Label ist der letzte Befehl " d.Text = c" gedacht. Da das so ähnlich in einem anderen Skript funktioniert hat, verstehe ich nicht, weshalb es hier nicht geht.
Maybe muss bei dem if anweisungs "block" auch mit klammern gearbeitet werden 🤔.
Schreibt er gar nichts in dein TextLabel oder fehlerhaftes?
Erst, wenn ich durch ein anderes Skript getötet werde und respawne, wird der Wert einmalig angezeigt.
Hmm meine letzte Idee wäre:
c ist ja ein numerischer wert die ganze Zeit, sprich du versuchst ein Numerischen wert in ein TextLabel wiederzugeben vielleicht packt das ja Lua nicht, also Guck mal ob du vielleicht c als Zeichenkette "umformen" kannst 🤔
Also vielleicht kannst du in TextLabels nur Zeichenketten anzeigen lassen, aber auch das wäre komisch wenn ja einmalig was angezeigt wird.
Aber ja das ist jetzt noch so meine letzte überlegung.
Roblox Studios ist irgendwie komisch, da auch das nicht funktioniert hat. Hab es jetzt über "leaderstats" gelöst.
Lua ist generell im Bereich der Spieleentwicklung sehr breit vertreten und ansonsten in all den Bereichen, wo Skripting halt nützlich ist (z.B. Anwendungen für Audio- oder Grafikbearbeitung, glue scripts in Serveranwendungen). Das hat sich auch seit den letzten ~10 Jahren nicht sonderlich geändert.
In dem von dir geteilten Thread werden ganz andere Aussagen für einen anderen Kontext getroffen.