خط النهاية
جزء من قسم برمجة ألعاب Roblox في رحلة Lua على Coddy. الدرس 23 من 24.
خط النهاية يحتسب الفوز ويعيد الفائز إلى نقطة البداية. تمنح player:LoadCharacterAsync() اللاعب شخصية جديدة عند نقطة ظهوره، دون انتظار مؤقّت إعادة الظهور.
يستغرق ذلك لحظة. وحتى وصول الشخصية الجديدة، يواصل خط النهاية إطلاق Touched لأجزاء جسم الشخصية القديمة الأخرى، وسيُحتسب كل جزء منها فوزًا. يمنع ذلك استخدام آلية منع التكرار، ويحتاج خط النهاية إلى واحدة لكل لاعب، حتى يُحتسب فوز لاعبين ينهيان السباق معًا. احتفظ بها في جدول يكون اللاعب مفتاحه:
local busy = {}
if not busy[player] then
busy[player] = true
-- احتسب الفوز، وأعِد اللاعب
task.wait(1)
busy[player] = nil
endتقرأ busy[player] مدخلة الجدول الخاصة بذلك اللاعب أو تضبطها، وتكون قيمة المدخلة المفقودة هي nil. تزيل busy[player] = nil المدخلة، لذا يُحتسب عبوره التالي مجددًا.
التحدي
متوسطوسادة الذهب هي خط النهاية، وهذا البرنامج النصي بداخلها. لدى كل لاعب بالفعل leaderstats مع Wins بقيمة 0، وتم إعداد منع التكرار لكل لاعب.
- أضف 1 إلى
Winsالخاص باللاعب. - أعِد اللاعب إلى نقطة البداية باستخدام
player:LoadCharacterAsync(). - ثم امسح منع التكرار الخاص به، حتى تُحتسب جولته التالية.
اضغط على Play، واركض إلى خط النهاية مرتين، ثم اضغط على Check.
جرّب بنفسك
local Players = game:GetService("Players")
local finish = script.Parent
local busy = {}
finish.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not busy[player] then
busy[player] = true
-- 1. أضف 1 إلى Wins الخاصة باللاعب
-- 2. أعد اللاعب إلى نقطة البداية
-- 3. بعد 1 ثانية، اسمح له بالفوز مرة أخرى
end
end)
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس برمجة ألعاب Roblox
تدرّب بنفسك: مترجم Lua عبر الإنترنت