es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una manera más simple de encontrar objetos dentro de objetos padres en Roblox (Lua)?

local colorwheel = script.Parent
local clickdetector = colorwheel.ClickDetector

— Clic izquierdo (encender)
clickdetector.MouseClick:connect(function()
print(“luces encendidas”)
for _,p in pairs(workspace.OceanVillagedr201:GetChildren()) do
if p.Name == (“Downstairs”) then
for _,x in pairs(p:GetChildren()) do
if x.Name == “Kitchen Bar Counter” then
for _,d in pairs(x:GetChildren()) do
if d.Name == “barlight” then
for _,j in pairs(d:GetChildren()) do
if j.Name == “light” then
j.Transparency = 0
else
end
end
end
end
end
end
end
end
end)

— Clic derecho (apagar)
clickdetector.RightMouseClick:connect(function()
print(“luces apagadas”)
for _,p in pairs(workspace.OceanVillagedr201:GetChildren()) do
if p.Name == “Downstairs” then
for _,x in pairs(p:GetChildren()) do
if x.Name == “Kitchen Bar Counter” then
for _,d in pairs(x:GetChildren()) do
if d.Name == “barlight” then
for _,j in pairs(d:GetChildren()) do
if j.Name == “light” then
j.Transparency = 1
else
end
end
end
end
end
end
end
end
end)

Este script es responsable de encender y apagar una luz cuando el “colorwheel” ha detectado un clic. Para mantener mi espacio de trabajo ordenado, coloco modelos dentro de modelos y luego coloco esos modelos en carpetas, creando esencialmente muchos .parents al objeto original que deseo modificar. Esto me obliga a llamar a la función :GetChildren(), como puedes ver, para que el script busque en todos los padres del objeto individual. ¿Hay alguna manera de simplificar esto o se considera la forma apropiada de script en Roblox?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de simplificar este script. En lugar de usar la función GetChildren() para buscar a través de todos los padres del objeto individual, puedes usar la función FindFirstChild(). Esta función buscará en el objeto padre y sus hijos el objeto especificado.

    Por ejemplo, en lugar de usar el siguiente código:

    for _,p in pairs(workspace.OceanVillagedr201:GetChildren()) do
        if p.Name == ("Downstairs") then
            for _,x in pairs(p:GetChildren()) do
                if x.Name == "Kitchen Bar Counter" then
                    for _,d in pairs(x:GetChildren()) do
                        if d.Name == "barlight" then
                            for _,j in pairs(d:GetChildren()) do
                                if j.Name == "light" then
                                    j.Transparency = 0
                                else
                                end
                            end
                        end
                    end
                end
            end
        end
    end
    

    Puedes usar el siguiente código:

    local light = workspace.OceanVillagedr201:FindFirstChild("Downstairs"):FindFirstChild("Kitchen Bar Counter"):FindFirstChild("barlight"):FindFirstChild("light")
    light.Transparency = 0
    

    Este código es mucho más simple y fácil de leer.

Comments are closed.