Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Why does this script stop?

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?

1 answer

✓ Accepted answer

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?

2 comments

0

It works! Thanks!

0

You're welcome. Did you understand what I said?

This discussion is preserved as it was. New answers, comments, and votes are closed.