אוסף המטבעות
חלק מהיחידה תכנות משחקים ב-Roblox במסלול ה-Lua של Coddy. שיעור 15 מתוך 24.
משטח האוצר הגדיר את Coins ל־100. מטבע אמור להוסיף 1, וזה יוצר בעיה חדשה.
Touched מופעל פעם אחת עבור כל חלק בגוף שנוגע, ולכן צעד אחד על מטבע יכול להפעיל אותו כמה פעמים. הוסף נקודה אחת בכל פעם, ומטבע יחיד יעניק כמה נקודות.
הפתרון הוא מנגנון למניעת הפעלה חוזרת: משתנה שזוכר "זה כבר קרה" וגורם לקוד להתעלם מההפעלות החוזרות:
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 הוא true רק כאשר שניהם true: if player and not used then דורש שחקן ומטבע שלא נעשה בו שימוש.
כדי לאפשר לזה לקרות שוב מאוחר יותר, המתן ואפס את המשתנה: task.wait(3) ואז used = false. ההמתנה משהה רק את הפונקציה הזאת, ולכן מגעים אחרים ממשיכים להגיע ומתעלמים מהם כל עוד used הוא true.
value += 1 הוא קיצור של value = value + 1, ו־CanTouch = false גורם לחלק להפסיק להפעיל את Touched עד שמגדירים אותו שוב ל־true.
אתגר
בינוניהחיבורים של leaderstats ושל Touched מוכנים, אבל לחצו על הפעל ועברו דרך מטבע: 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 אונליין