Münzsammler
Teil des Abschnitts Roblox-Spiele skripten der Lua-Journey von Coddy. Lektion 15 von 24.
Das Schatzfeld setzte Coins auf 100. Eine Münze sollte 1 hinzufügen, und das bringt ein neues Problem mit sich.
Touched wird für jeden Körperteil ausgelöst, der es berührt. Ein einziger Schritt auf eine Münze kann das Ereignis also mehrmals auslösen. Addiere jedes Mal 1 Punkt, und eine einzelne Münze gibt mehrere Punkte.
Die Lösung ist ein Entprellen: eine Variable, die sich merkt: „Das ist bereits passiert“ und den Code die Wiederholungen ignorieren lässt:
local used = false
button.Touched:Connect(function(hit)
if not used then
used = true
print("Pressed!")
end
end)not used ist true, solange used false ist. Daher kommt nur die erste Berührung an if not used vorbei. a and b ist nur dann true, wenn beide true sind: if player and not used then erfordert einen Spieler und eine unbenutzte Münze.
Damit es später erneut passieren kann, warte und setze die Variable zurück: task.wait(3), dann used = false. Das Warten pausiert nur diese Funktion. Andere Berührungen kommen weiterhin an und werden ignoriert, solange used true ist.
value += 1 ist die Kurzform von value = value + 1, und CanTouch = false sorgt dafür, dass ein Teil Touched nicht mehr auslöst, bis es wieder auf true gesetzt wird.
Aufgabe
MittelDie leaderstats und die Touched-Verbindungen sind bereit, aber drücke auf Play und gehe durch eine Münze: Coins steigt um mehr als 1.
Behebe das Problem und vervollständige die Münzen:
- Jede Münze gibt pro Einsammeln genau 1 Coin (eine Entprellung pro Münze).
- Eine eingesammelte Münze wird ausgeblendet:
Transparency1undCanTouchfalse. - 3 Sekunden später kommt sie zurück (
Transparency0,CanTouchtrue) und kann erneut eingesammelt werden.
Probier es selbst
local Players = game:GetService("Players")
local coins = workspace.Coins
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coinsValue = Instance.new("IntValue")
coinsValue.Name = "Coins"
coinsValue.Value = 0
coinsValue.Parent = leaderstats
end)
for _, coin in coins:GetChildren() do
coin.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player then
player.leaderstats.Coins.Value += 1
end
end)
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Roblox-Spiele skripten
2Schleifen und Funktionen
SäulenreiheTreppenbauerTurmbauerMünzfabrikBlinkendes LichtVerschwindende Brücke5Dein erstes Spiel
Dein erstes ObbyÜbe selbstständig: Online-Lua-Compiler