Remove a screenGUI when unequipping

徘徊边缘 提交于 2020-01-16 18:16:17

问题


I already made a question on cooldown a weapon and I made a screenGUI to show the player when they can shoot again implementing the same debounce code. The problem is I've got no clue on how to delete the screengui/textlabel from the screen. As every tool I'm planing on doing has its own GUI, if the screenGUI of one tool doesn't delete, it will overlap with the same tool's GUI/ other tools GUI.

I already tried hiding the text label as stated in this question like this player.PlayerGui.ScreenGui.TextLabel.Visible = false but 1) It only makes it disappear first time its unequipped and 2) Im afraid that given it doesn't get deleted, but rather hidden, after some time, stacked hidden GUIs will somehow affect the games smoothness in some way.

local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local tool = script.Parent

--Creaets a text label with the text Block Ready! on it when the player 
local function onEquip()
  print("screengui1")
  local screenGui = Instance.new("ScreenGui")
  screenGui.Parent = player.PlayerGui
  local textLabel = Instance.new("TextLabel")
  textLabel.Parent = screenGui
  textLabel.BackgroundTransparency = 0.85
  textLabel.Position = UDim2.new(0, 1100, 0, 550)
  textLabel.Size = UDim2.new(0, 150, 0, 50)
  textLabel.BackgroundColor3 = BrickColor.White().Color
  textLabel.Text = "Block ready!"
end

local isGunOnCooldown = false
local cooldownTime = 3 --seconds
mouse.Button1Down:Connect(function()
    -- debounce clicks so the text dont changes (its cooldown is the same as the gun cooldown the GUI is within)
    if isGunOnCooldown then
        return
    end

    -- change the text, 
    isGunOnCooldown = true
    player.PlayerGui.ScreenGui.TextLabel.Text = "Reloading..."
    -- start the cooldown and reset it along with the test
    spawn(function()
        wait(cooldownTime)
        isGunOnCooldown = false
        player.PlayerGui.ScreenGui.TextLabel.Text = "Block ready!"
    end)
end)



local function onUnequip()
    --code to delete the gui goes here
end
tool.Equipped:connect(onEquip)
tool.Unequipped:connect(onUnequip)

I just need explanation on how to delete the screenGUI that contains the textlabel shown to the player when they unequip the weapon


回答1:


The easiest way to handle this is to keep a reference to the UIElement when you first create it. Then when you equip the tool, you simply set the Parent. When you unequip, you set the Parent to nil. This way, you know that there will always be one element, you are simply controlling when it is visible.

local function createAmmoUI()
    --Creates a text label with the text Block Ready! on it when the player
    local screenGui = Instance.new("ScreenGui")
    local textLabel = Instance.new("TextLabel")
    textLabel.Name = "Message"
    textLabel.Parent = screenGui
    textLabel.BackgroundTransparency = 0.85
    textLabel.Position = UDim2.new(0, 1100, 0, 550)
    textLabel.Size = UDim2.new(0, 150, 0, 50)
    textLabel.BackgroundColor3 = BrickColor.White().Color
    textLabel.Text = "Block ready!"

    return screenGui
end

-- make a persistent UI element to show off how much ammo is left and when reload is done
local ammoUI = createAmmoUI()


local function onEquip()
    -- when the tool is equipped, also show the UI
    print("Equipping Tool to current Player")
    ammoUI.Parent = player.PlayerGui
end

local function onUnequip()
    -- when the tool is unequipped, also remove the UI from the screen entirely
    print("Unequiping Tool UI")
    ammoUI.Parent = nil
end


local isGunOnCooldown = false
local cooldownTime = 3 --seconds
mouse.Button1Down:Connect(function()
    -- debounce clicks so the text dont changes (its cooldown is the same as the gun cooldown the GUI is within)
    if isGunOnCooldown then
        return
    end

    -- change the text, 
    isGunOnCooldown = true
    ammoUI.Message.Text = "Reloading..."

    -- start the cooldown and reset it along with the test
    spawn(function()
        wait(cooldownTime)
        isGunOnCooldown = false
        ammoUI.Message.Text = "Block ready!"
    end)
end)

tool.Equipped:connect(onEquip)
tool.Unequipped:connect(onUnequip)


来源:https://stackoverflow.com/questions/55813667/remove-a-screengui-when-unequipping

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!