#lua #roblox
#lua #roblox
Вопрос:
Я пытаюсь найти лучший/более короткий способ уменьшить любое отставание и приложить меньше усилий, так как, если мне нужно что-то изменить в сценарии, мне нужно будет сделать это для каждого из них.
Есть ли лучший способ иметь короткие?
Я попытался сделать так, чтобы у них было одно и то же имя «Glass1» и одно и то же имя «Glass2», но это сработало только с первым, я хотел бы уточнить это.
Вот мой код:
local End = script.Parent.End local Start = script.Parent.Start local Glass = script.Parent --Glass1/1-8 are the glasses that fall if touched and they change color to red local function TouchedGlass11(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = Glass.Glass11 num.Anchored = false num.BrickColor = BrickColor.Red() wait(2) num:Destroy() else return end end Glass.Glass11.Touched:Connect(TouchedGlass11) local function TouchedGlass12(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = Glass.Glass12 num.Anchored = false num.BrickColor = BrickColor.Red() wait(2) num:Destroy() else return end end Glass.Glass12.Touched:Connect(TouchedGlass12) local function TouchedGlass13(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = Glass.Glass13 num.Anchored = false num.BrickColor = BrickColor.Red() wait(2) num:Destroy() else return end end Glass.Glass13.Touched:Connect(TouchedGlass13) local function TouchedGlass14(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = Glass.Glass14 num.Anchored = false num.BrickColor = BrickColor.Red() wait(2) num:Destroy() else return end end Glass.Glass14.Touched:Connect(TouchedGlass14) --then I'll do Glass2/1-8 which just turn the brick to green. local function TouchedGlass21(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = Glass.Glass21 num.BrickColor = BrickColor.Green() else return end end Glass.Glass21.Touched:Connect(TouchedGlass21) local function TouchedGlass22(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = Glass.Glass22 num.BrickColor = BrickColor.Green() else return end end Glass.Glass22.Touched:Connect(TouchedGlass22) local function TouchedGlass23(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = Glass.Glass23 num.BrickColor = BrickColor.Green() else return end end Glass.Glass23.Touched:Connect(TouchedGlass23) local function TouchedGlass24(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = Glass.Glass24 num.BrickColor = BrickColor.Green() else return end end Glass.Glass24.Touched:Connect(TouchedGlass24) --Does anyone know a better way?
пожалуйста, обратите внимание: в «Glass2» и «Glass1» есть 8 стаканов, но скоро я добавлю еще, поэтому я ищу более простой способ.
Ответ №1:
Глядя на ваш код, довольно легко заметить, что вы используете множество функций, к которым прикасаетесь.
Вы можете значительно сократить это, используя цикл for, который повторяет каждую из частей сценария.Родитель.
local glass = script.Parent -- iterate through each child and assign the child to the variable object for _, object in pairs(glass:GetChildren()) do -- Make sure this child of script.Parent is actually a part. if object:IsA("Part") then object.Touched:Connect(function(hit) local partParent = hit.Parent local humanoid = partParent:FindFirstChildWhichIsA("Humanoid") if humanoid then local num = object num.Anchored = false num.BrickColor = BrickColor.Red() wait(2) num:Destroy() end end) end end
Вам также не нужно иметь возврат в ваших затронутых функциях.
Комментарии:
1. Спасибо! Это очень помогает, так как мне не нужно добавлять миллионы функций 😀