Menu
CoddyTech

Madeni Para Toplayıcı

Coddy'nin Lua Journey'sinin Roblox Oyunları için Kodlama bölümünün bir parçası. Ders 15 / 24.

Hazine pedi Coins değerini 100 olarak ayarladı. Bir madeni para 1 eklemeli ve bu yeni bir soruna yol açıyor.

Touched, dokunan her vücut parçası için bir kez tetiklenir; bu nedenle bir madeni paranın üzerine tek bir adım atmak onu birkaç kez tetikleyebilir. Her seferinde 1 puan ekleyin; tek bir madeni para birkaç puan kazandırır.

Çözüm bir debounce: “bu zaten oldu” bilgisini hatırlayan ve kodun tekrarları yok saymasını sağlayan bir değişken:

local used = false
button.Touched:Connect(function(hit)
	if not used then
		used = true
		print("Pressed!")
	end
end)

used değeri false iken not used değeri true olur; bu nedenle yalnızca ilk dokunuş if not used koşulunu geçer. a and b yalnızca ikisi de doğru olduğunda doğrudur: if player and not used then için bir oyuncu ve kullanılmamış bir madeni para gerekir.

Daha sonra yeniden gerçekleşmesine izin vermek için bekleyip sıfırlayın: task.wait(3) ardından used = false. Bekleme yalnızca bu işlevi duraklatır; böylece diğer dokunuşlar gelmeye devam eder ve used değeri true iken yok sayılır.

value += 1, value = value + 1 ifadesinin kısa yazımıdır ve CanTouch = false, tekrar true olarak ayarlanana kadar bir parçanın Touched olayını tetiklemeyi durdurmasını sağlar.

challenge icon

Görev

Orta

leaderstats ve Touched bağlantıları hazır, ancak Play'e basıp bir madeni paranın içinden geçince Coins 1'den fazla artıyor.

Bunu düzelt ve madeni paraları tamamla:

  1. Her madeni para toplandığında tam olarak 1 madeni para verir (her madeni para için bir debounce).
  2. Toplanan madeni para gizlenir: Transparency 1 ve CanTouch false.
  3. 3 saniye sonra geri gelir (Transparency 0, CanTouch true) ve yeniden toplanabilir.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Roblox Oyunları için Kodlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi