Как проверить наличие объекта в Roblox с lua? - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь кодировать gui, который назначается динамически. У меня есть четыре команды. Я застреваю в определенной точке. Я хочу сделать функцию, которая, когда игрок присоединяется к игре, проверяет, забили ли другие команды обновить свои ярлыки. Это выглядит так:

local function updateAllLabelsLateArrival(redPoints, bluePoints, yellowPoints, greenPoints)

    game.Players.LocalPlayer.PlayerGui.ScreenGui.ReallyRedTeam.Points.Text = redPoints
    game.Players.LocalPlayer.PlayerGui.ScreenGui.ReallyBlueTeam.Points.Text = bluePoints 
    game.Players.LocalPlayer.PlayerGui.ScreenGui.NewYellerTeam.Points.Text = yellowPoints
    game.Players.LocalPlayer.PlayerGui.ScreenGui.LimeGreenTeam.Points.Text = greenPoints

end

Функция удаленно запускается из серверного сценария, когда игрок присоединяется. У меня проблема в том, что не все четыре метки могут существовать. Предположим, что зеленый командный игрок присоединяется, когда только красный командный игрок уже играет. Он вернется с ошибкой

ReallyBlueTeam is not a valid member of ScreenGui

Я подумал обернуть каждую строку в оператор if, чтобы проверить, существует ли метка, вот так:

if game.Players.LocalPlayer.PlayerGui.ScreenGui.ReallyRedTeam then game.Players.LocalPlayer.PlayerGui.ScreenGui.ReallyRedTeam.Points.Text = redPoints end

Но это дает то же самое ошибка. Итак, мой вопрос, как я могу проверить, что метка была создана перед обновлением точек? спасибо

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Если вы хотите, чтобы все они были в одной строке, то лучше всего было бы использовать FindFirstChild(), как сказал @jjwood1600. Я также рекомендовал бы использовать переменную для сокращения ваших GUI путей, как вы можете видеть ниже:

local function updateAllLabelsLateArrival(redPoints, bluePoints, yellowPoints, greenPoints)

    local userGui = game.Players.LocalPlayer.PlayerGui.ScreenGui
    if userGui:FindFirstChild("ReallyRedTeam") then userGui.ReallyRedTeam.Points.Text = redPoints end
    if userGui:FindFirstChild("ReallyBlueTeam") then userGui.ReallyBlueTeam.Points.Text = bluePoints end
    if userGui:FindFirstChild("NewYellerTeam") then userGui.NewYellerTeam.Points.Text = yellowPoints end
    if userGui:FindFirstChild("LimeGreenTeam") then userGui.LimeGreenTeam.Points.Text = greenPoints end

end

В обычном Lua вы действительно можете делать операторы if так, как вы делали, где вы делали не используется FindFirstChild, но собственная версия Roblox RBX. Lua не.

0 голосов
/ 26 января 2020

Предполагая, что это локальный скрипт, вы можете использовать WaitForChild (), который будет выдавать, пока метка не будет создана!

game.Players.LocalPlayer.PlayerGui:WaitForChild("ScreenGui"):WaitForChild("ReallyRedTeam"):WaitForChild("Points").Text = redPoints

Подробнее о WaitForChild здесь !

В качестве альтернативы, если вы точно не знаете, что они будут созданы, вы можете использовать FindFirstChild. Это не даст результата.

if game.Players.LocalPlayer.PlayerGui.ScreenGui:FindFirstChild("ReallyRedTeam") then
    print("it exists")
end

Подробнее о FindFirstChild здесь ! Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...