קו הסיום
חלק מהיחידה תכנות משחקים ב-Roblox במסלול ה-Lua של Coddy. שיעור 23 מתוך 24.
קו הסיום נחשב לניצחון ומחזיר את המנצח לנקודת ההתחלה. player:LoadCharacterAsync() מעניקה לשחקן דמות חדשה בנקודת ההופעה שלו, בלי להמתין לטיימר ההופעה מחדש.
זה לוקח רגע. עד שהדמות החדשה מגיעה, קו הסיום ממשיך להפעיל את Touched עבור חלקי הגוף האחרים של הדמות הישנה, וכל אחד מהם היה נחשב לניצחון. מנגנון למניעת הפעלה חוזרת מונע זאת, וקו הסיום צריך אחד לכל שחקן, כך ששני שחקנים שמסיימים יחד ייחשבו שניהם. שמרו את המידע בטבלה, כשהמפתח הוא השחקן:
local busy = {}
if not busy[player] then
busy[player] = true
-- ספור את הניצחון, החזר את השחקן
task.wait(1)
busy[player] = nil
endbusy[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 אונליין