جامع العملات
جزء من قسم برمجة ألعاب Roblox في رحلة Lua على Coddy. الدرس 15 من 24.
وسادة الكنز ضبطت Coins على 100. ينبغي أن تضيف العملة 1، وهذا يطرح مشكلة جديدة.
يُطلَق الحدث Touched مرةً لكل جزء من الجسم يلمسها، لذا قد يؤدي اتخاذ خطوة واحدة على العملة إلى إطلاقه عدة مرات. أضف نقطةً في كل مرة، وستمنح العملة الواحدة عدة نقاط.
الحل هو منع التكرار (debounce): متغير يتذكر أن «هذا حدث بالفعل» ويجعل الكود يتجاهل التكرارات:
local used = false
button.Touched:Connect(function(hit)
if not used then
used = true
print("Pressed!")
end
end)تكون not used هي true عندما تكون used هي false، لذا لا يتجاوز if not used إلا اللمس الأول. تكون a and b صحيحة فقط عندما يكون كلاهما صحيحًا: يتطلب if player and not used then وجود لاعب وعملة غير مستخدمة.
للسماح بحدوث ذلك مرة أخرى لاحقًا، انتظر ثم أعد ضبطه: task.wait(3) ثم used = false. يوقف الانتظار هذه الدالة فقط، لذا تستمر اللمسات الأخرى في الوصول ويُتجاهلها ما دامت used هي true.
value += 1 اختصار لـ value = value + 1، وتجعل CanTouch = false الجزء يتوقف عن إطلاق Touched إلى أن تُعاد إلى true.
التحدي
متوسطأصبحت leaderstats واتصالات Touched جاهزة، لكن اضغط على Play وامشِ عبر عملة: تزداد Coins بأكثر من 1.
أصلح ذلك وأكمل إعداد العملات:
- تمنح كل عملة بالضبط 1 Coin عند التقاطها (آلية منع التكرار لكل عملة).
- تختفي العملة بعد التقاطها:
Transparency1وCanTouchfalse. - بعد 3 ثوانٍ، تعود (
Transparency0وCanTouchtrue) ويمكن التقاطها مجددًا.
جرّب بنفسك
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
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس برمجة ألعاب Roblox
تدرّب بنفسك: مترجم Lua عبر الإنترنت