function onTouch(hit) local player = game.Players:GetPlayerFromCharacter(hit.Parent) if player then screengui = Instance.new("ScreenGui", player.PlayerGui) frame = Instance.new("Frame", screengui) frame.Size = UDim2.new(1, 0, 1, 0) frame.BackgroundColor3 = Color3.new(255, 255, 255) frame.BackgroundTransparency = 1 for i = 1, 10 do frame.BackgroundTransparency = frame.BackgroundTransparency - 0.1 wait() end hit.Parent.Torso.CFrame = workspace.BedSpawn.CFrame wait(0.5) for i = 1, 10 do frame.BackgroundTransparency = frame.BackgroundTransparency + 0.1 wait() end screengui:Destroy() end end script.Parent.Touched:connect(onTouch)
This script makes the screen flash when a player hits an object and teleports the player to another location, then fades out. The problem is, when the gui fades out and hits around 0.8 transparency, it just stops. The gui doesn't get destroyed. How come?
The problem is not in the script, but how it behaves. It is doing exactly what you want it to do, but, when it gets hit again the variables screengui
and frame
get replaced. The reason why it seems to stop at .8 is that it is probably when your other foot hit the brick and it "dumps" the variables.
The best fix for this is to make them local like so:
local screengui = Instance.new("ScreenGui", player.PlayerGui) local frame = Instance.new("Frame", screengui)
By keeping them local to when the function is called, they won't get "dumped" and will act as intended.
Did I explain that well, or did I confuse you?