Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Die 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:

  1. Jede Münze gibt pro Einsammeln genau 1 Coin (eine Entprellung pro Münze).
  2. Eine eingesammelte Münze wird ausgeblendet: Transparency 1 und CanTouch false.
  3. 3 Sekunden später kommt sie zurück (Transparency 0, CanTouch true) 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
quiz iconTeste dich selbst

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

Übe selbstständig: Online-Lua-Compiler