الآن بعد أن لديك عالم ثلاثي الأبعاد، حان الوقت لإضافة أول نص. في هذا القسم، ستقوم بإنشاء آلية جمع العملات التي تسمح للاعبين بجمع العملات وتعطيل العملات مؤقتًا بعد أن يتم جمعها.
إنشاء العملات
قبل أن تتمكن من البرمجة، تحتاج إلى وجود كائنات كمواضيع في العالم لاستخدامها كعملاتك. مثل منصات كومة البحر التي أنشأتها في القسم السابق، يمكن أن تكون العملات كائنات Part بسيطة.
إنشاء العملاتفي Workspace > World، أنشئ مجلدًا جديدًا باسم Coins.داخل مجلد Coins، أنشئ جزء أسطواني باسم Coin مع BrickColor مضبوطة على Gold، وMaterial مضبوطة على Metal، وSize مضبوطة على 0.6، 8، 4، وOrientation مضبوطة على 90، 0، 0.قم بتعطيل CanCollide وقم بتمكين Anchored.ثم قم بتكرار جزء Coin عدة مرات وانتشر النسخ عبر الجزيرة وعلى المنصات بحيث تكون قابلة للوصول من مستويات كومة البحر.احتفظ باسم كل نسخة Coin.
إنشاء البرنامج النصي
بعد ذلك، ستجعل العملات تستجيب للاعبين. يمكن لمحرك Roblox اكتشاف متى يلمس شيء العملة، ولكن تحتاج إلى استخدام نص لتعريف كيفية استجابة العملة.
إنشاء CoinServiceفي ServerScriptService، أنشئ نصًا باسم CoinService مع الكود التالي:```lua-- تهيئة الخدمات والمتغيراتlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- تعريف معالج الحدثlocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- اللاعب لمس عملةcoin.Transparency = 1coin:SetAttribute("Enabled", false)print("اللاعب جمع العملة")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- إعداد مستمعي الأحداثfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end```
الآن، كلما لمس لاعب عملة، ستختفي العملة لمدة 10 ثوانٍ، وسجل الإخراج يطبع اللاعب جمع العملة.
تصف الأقسام التالية كيفية عمل البرنامج النصي بمزيد من التفصيل.
تهيئة الخدمات والمتغيرات
مثل الكثير من الكود الذي ربما كتبته في لغات أخرى، تقوم بتعريف المتغيرات التي تحتاجها لاحقًا في الجزء العلوي من البرنامج النصي. يقوم كودنا بما يلي:
- الحصول على مراجع لجميع العملات - يقوم البرنامج النصي بعد ذلك باستعلام العمل ثلاثي الأبعاد عن جميع المراجع لكائنات العملات باستخدام الطريقة GetChildren(). تُرجع هذه الطريقة مصفوفة تحتوي على كل شيء تم إضافته كأب للجسم المرتبط به، والذي في هذه الحالة هو مجلد Workspace.World.Coins الذي أنشأته سابقًا.
- تعريف متغير عالمي - يتم استخدام متغير COOLDOWN لاحقًا لتعريف مدى مدة تعطيل العملة بعد جمعها.
تهيئة الخدمات والمتغيراتlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
تعريف معالج الحدث
يقوم محرك Roblox بمحاكاة العالم ثلاثي الأبعاد ويتعامل مع الكثير من المنطق لمعالجة الأحداث المتعلقة بالرسم والفيزياء والشبكات. عندما تكون مهتمًا ببرمجة منطقيتك الخاصة خلال بعض هذه الأحداث، يمكنك الاستماع إليها والتعامل معها، بينما يترك المحرك الباقي. في هذه الحالة، تستمع إلى وتتعامل مع الأحداث المتعلقة بلمس العملات. يحدد البرنامج النصي المنطق للتعامل مع هذا الحدث في طريقة onCoinTouched()، والتي تفعل ما يلي:
- تحديد ما إذا كانت العملة مفعلة - كل Instance لديها خاصية بوليانية Enabled تحدد ما إذا كان الكائن موجودًا في العالم ثلاثي الأبعاد أم لا. يمكنك الحصول على خصائص الكائنات باستخدام الطريقة GetAttribute().
- تحديد ما إذا كان لاعب قد لمس العملة - إذا كانت عملة مفعلة، تستخدم الطريقة خدمة اللاعب للتحقق مما إذا كان الكائن الذي لمس العملة كان بالفعل لاعبًا. عند حدوث حدث لمس، يمرر محرك Roblox الكائن الذي لمس العملة كمعامل otherPart. يتحقق البرنامج النصي مما إذا كان والد otherPart ينتمي إلى لاعب.
- تعطيل العملة إذا لمسها لاعب، وإعادة تمكينها بعد 10 ثوانٍ - أخيرًا، إذا لمس لاعب العملة، تقوم الطريقة بتعطيل العملة، تنتظر لمدة 10 ثوانٍ، ثم تعيد تمكين العملة لجمعها. يتم استخدام task.wait() بدلاً من wait() لأنها تقدم أداءً أفضل بعدم إيقاف تنفيذ الكود بالكامل، مما يسمح للمهام في خيوط أخرى بالتنفيذ بالتزامن.
تعريف معالج الحدث
local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- اللاعب لمس عملة
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("اللاعب جمع العملة")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
ربط معالج الحدث
ترث جميع الكائنات ثلاثية الأبعاد المحاكية من BasePart وبالتالي لديها حدث Touched(). حلقة التالي تربط معالج onTouchedEvent() لحدث لمسة كل عملة من خلال القيام بما يلي:
- التكرار عبر جميع العملات - تكرار عبر كل العملات باستخدام التكرار العام.
- ربط المعالج بالحدث - في كل تكرار من حلقة التكرار، يتم تمكين العملة بشكل افتراضي، بحيث تكون مرئية في العالم ثلاثي الأبعاد خلال بدء اللعبة الأولي. يتم أيضًا ربط طريقة المعالج onCoinTouched() بحدث اللمس للعملة بحيث تعمل كلما حدث الحدث. عندما يكشف المحرك عن ملامسة، فإنه يمرر أيضًا الكائن الذي لمس الكائن، otherPart.
ربط معالج الحدث
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end
اختبار الآلية
اختر اختبار من القائمة المنسدلة وانقر على تشغيل. حرك شخصيتك لتلمس عملة. إذا كانت كل الأمور تعمل بشكل صحيح، ستختفي العملة، ونافذة الإخراج ستطبع اللاعب جمع العملة، وستظهر العملة مرة أخرى بعد 10 ثوانٍ.
