Warum funktioniert dieser Code nicht vollständig?

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

Woher ich das weiß:Hobby – Ich Code in meiner Freizeit viel(Python und C#)

regex9  02.06.2024, 13:52

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.

0
regex9  02.06.2024, 13:44
Mit Lua kann man mittlerweile nicht mehr so viel mit anfangen(außer Roblox)

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.

0
Hemo20  02.06.2024, 13:55
@regex9

Nur gibt es trotzdem viel mächtigere Programmiersprachen… Ich mag Lua nicht!

0

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
Woher ich das weiß:Berufserfahrung

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.


ProPlayerE 
Beitragsersteller
 02.06.2024, 01:14

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.

1
Hansikanzie  02.06.2024, 01:13

Maybe muss bei dem if anweisungs "block" auch mit klammern gearbeitet werden 🤔.

0
ProPlayerE 
Beitragsersteller
 02.06.2024, 01:15
@Hansikanzie

Nicht in Lua

Also der Fehler liegt in der Semantik. Syntax ist i.O.

1
ProPlayerE 
Beitragsersteller
 02.06.2024, 01:25
@Hansikanzie

Erst, wenn ich durch ein anderes Skript getötet werde und respawne, wird der Wert einmalig angezeigt.

0
Hansikanzie  02.06.2024, 01:29
@ProPlayerE

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.

1
ProPlayerE 
Beitragsersteller
 03.06.2024, 00:44
@Hansikanzie

Roblox Studios ist irgendwie komisch, da auch das nicht funktioniert hat. Hab es jetzt über "leaderstats" gelöst.

0