Я кодирую свою игру с lua на Roblox Stuido ide. Игра работает - вроде как, хотя я знаю, что код не очень хорош. Это игра для маленьких детей, в которой число отображается на знаке, и игрок должен go к платформе, которая соответствует числу. Одна из проблем, с которыми я столкнулся, заключается в том, что я хочу, чтобы был GUI, который отображал бы точки в больших количествах, поскольку статистику лидеров в верхнем углу было не так легко увидеть. Я хочу, чтобы игрок не просто видел свои очки, это было бы несколько проще, просто добавьте textLabel на стартовый плеер gui с помощью такого сценария:
while true do
wait(.1)
script.Parent.Text = game.Players.LocalPlayer.leaderstats.Platforms.Value
end
со следующим кодом тоже:
game.Players.PlayerAdded:connect(function(player)
local playerKey = "Player_" .. player.UserId
local leaderstats = Instance.new("Folder",player)
leaderstats.Name = "leaderstats"
local Platforms = Instance.new("IntValue", leaderstats)
Platforms.Name = "Platforms"
Platforms.Value = 0
platformCount:SetAsync(player.UserId, 0)
StartGui:FireAllClients(player)
end)
Пожалуйста, обратите внимание на последние пару строк этого блока, это то, что я придумал. Я не уверен, как это сделать лучше, но я чувствую, что они не соответствуют действительности.
Моя цель состоит в том, чтобы каждый игрок мог видеть не только свои обновленные оценки в режиме реального времени, но и результаты всех других игроков. Это то, что не полностью работает. Мой метод заключается в следующем. Когда игрок выходит на нужную платформу, у меня есть этот код на локальном скрипте
allPlats[k].Eliminated = true
player:WaitForChild("leaderstats"):FindFirstChild("Platforms").Value = player:WaitForChild("leaderstats"):FindFirstChild("Platforms").Value + 1 --increase leaderstats
points = points + 1
numIfScored:InvokeServer(column, row, teamColorReady, points, team)
PlatformDeleted.OnClientEvent:Connect(platformTransparency)
Игнорировать строки, которые не относятся к вопросу. Важной частью этого вопроса является то, что я обращаюсь к intValue, созданному в лидерах, и увеличиваю его значение на единицу. Я также отправляю вызов на сервер с удаленной функцией, которая проходит там, где была платформа, цвет команды и т. Д. c ...
Затем серверный скрипт использует эти значения для выполнения ряда задач. связанные с установкой следующей цели и обновлением внешнего вида платформ и, что особенно важно, отправкой данных в хранилище данных:
функция numIfScored.OnServerInvoke (plr, col, row, orignalTeamColor, points, team)
game.Workspace.TargetNumber.Value = getAnddisplayTarget(col, row)
PlatformDeleted:FireAllClients(col, row)
for k, v in pairs(allPlats) do
if v.Column == col and v.Row == row then
v.Part.Transparency = 0
v.Part.Material = "Neon"
v.Part.BrickColor = BrickColor.new(orignalTeamColor)
end
end
platformCount:SetAsync(plr.UserId, points)
end
Затем я запускаю отдельный блок кода в том же скрипте, который постоянно обновляет gui, собирая точки из хранилища данных:
while wait(.1) do
for _, player in pairs(Players:GetPlayers()) do
local points = platformCount:GetAsync(player.UserId)
UpdateGUI:FireAllClients(player.UserId,points, player.Team)
end
end
У меня есть localscript, который является дочерним по отношению к текстовой метке, которая отображает оценки со следующим кодом:
local function UpdateLabel(plrId, points, team)
if team.Name == "Really red Team" then
game.Players.LocalPlayer.PlayerGui.ScreenGui.RedTeam.Text = points
elseif team.Name == "Really blue Team" then
game.Players.LocalPlayer.PlayerGui.ScreenGui.BlueTeam.Text = points
end
end
StartGui.OnClientEvent:Connect(StartLabel)
Это работает, но глючит. Я играю дома с моим сыном, это вроде как работает, с небольшим отставанием, но как только я пытаюсь играть с другими игроками, такими как мой друг и его сын, система перестает работать хорошо. Одна вещь, которую я знаю, не очень хорошая, это то, что если вы начнете играть до того, как присоединится другой игрок, то этот игрок не сможет увидеть ваш прогресс до того, как он вошел. Другая проблема заключается в том, что первый игрок, который присоединится, будет виден игрокам, которые присоединятся позже. , но когда игроки присоединяются, которые не видят ярлыки игроков, которые присоединились ранее.
Существует ли намного более простой способ создать gui, который обновляет все оценки игроков во всех игроках gui ' s? Спасибо.
При необходимости могу выложить полный код.