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.
Görev
Ortaleaderstats 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:
- Her madeni para toplandığında tam olarak 1 madeni para verir (her madeni para için bir debounce).
- Toplanan madeni para gizlenir:
Transparency1veCanTouchfalse. - 3 saniye sonra geri gelir (
Transparency0,CanTouchtrue) 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
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
2Döngüler ve Fonksiyonlar
Sütun SırasıMerdiven YapıcıKule YapıcıMadeni Para FabrikasıYanıp Sönen IşıkKaybolan Köprü5İlk Oyunun
İlk Obby'n3Olaylar ve Oyuncular
Dokunmatik PedLav ZeminLider İstatistikleriOna Kim Dokundu?Madeni Para ToplayıcıMadeni Para KapısıKendi başına pratik yap: Online Lua derleyicisi