Menu
CoddyTech
flag Ar iconالعربيةdown icon

جامع العملات

جزء من قسم برمجة ألعاب 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.

challenge icon

التحدي

متوسط

أصبحت leaderstats واتصالات Touched جاهزة، لكن اضغط على Play وامشِ عبر عملة: تزداد Coins بأكثر من 1.

أصلح ذلك وأكمل إعداد العملات:

  1. تمنح كل عملة بالضبط 1 Coin عند التقاطها (آلية منع التكرار لكل عملة).
  2. تختفي العملة بعد التقاطها: Transparency 1 وCanTouch false.
  3. بعد 3 ثوانٍ، تعود (Transparency 0 وCanTouch true) ويمكن التقاطها مجددًا.

جرّب بنفسك

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 iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس برمجة ألعاب Roblox

تدرّب بنفسك: مترجم Lua عبر الإنترنت