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

How to destroy an object after touch function with debounces?

So I am creating a script for an interactive garden. If the player steps on the soil which contains a seed on top, the seed dissolves. When a player walks on it once again, a sprout slowly appears. I did that part successfully using two debounce variables.

But I want to continue the script. If the player walks across the soil which now contains the sprout, the sprout will dissolve and a flower will bloom in place.

This is the script so far:

debounce = false
rebounce = false
mbounce = false 
script.Parent.Soil.Touched:connect(function()
	
	if not debounce then 
	
	    debounce = true
	
	    for i = 0, 1, 0.1 do
		script.Parent.Seed.Transparency = i
		wait (0.1)
	end
	wait(20)
	debounce = false 

	end



if not rebounce then 
	
rebounce = true

	 for i = 1, 0, -0.1 do
		script.Parent.Sprout.Transparency = i
		wait (0.1)
	end
		wait(20)
	
	rebounce = false
	

if not mbounce then 
	mbounce = true 
		 for i = 0, 1, 0.1 do
		script.Parent.Sprout.Transparency = i
		wait (0.1)
	
		end
		wait(20)
mbounce = false 
end


end
	
end)

wait(5)

script.Parent.Sprout:Destroy()

How come when I use the "Destroy" Instance, it doesn't work at all?

Also, I want to do the for loop to get rid of the sprout, so it can appear to dissolve. But, when I did the for loop with a separate debounce variable, it did not work at all.

2 answers

I like your idea. Upvoted. Now, in this kind of script, I would suggest you a situation variable, like...

local Situation = "Nothing"

When touched is fired, put an if condition and do seeding process.

if Situation == "Nothing" then
	--Seeding process
	Situation = "Seed"
end

And same for others, but you have to use Elseif for this.

if Situation == "Nothing" then
	--Seeding process
	Situation = "Seed"
elseif Situation == "Seed" then
	--Sprouting process? I am not good at flowers
	Situation = "SproutOff"
elseif Situation == "SproutOff" then
	--Sprouting now???
	Situation = "SproutOn"
end

And if we get all those things together...

local Debounce = false
local Situation = "Nothing"

script.Parent.Soil.Touched:connect(function()
	if Debounce == false then
		Debounce = true
		
		if Situation == "Nothing" then
			--Seeding process
		elseif Situation == "Seed" then
			--Sprouting process? I am not good at flowers
			Situation = "SproutOff"
		elseif Situation == "SproutOff" then
			--Sprouting now???
			Situation = "SproutOn"
		end

		Debounce = false
	end
end

Please consider adding wait lines inside if statements. Putting them outside would confuse you, I think...

Edit: Use destroy inside function if you want to destroy something.

Did this help you? Then please upvote and accept as an answer. (Please upvote, I need those :'( )

This is disappointing, superalp beat me to it, oh well, I spent a lot of time on this so I'll share anyways lol

local debounce = false
local seedUsed = false
local sproutGrowing = false
local flowerBloomed = false
local goal = {}

local function TweenPart(part, Time, goal)
	game:GetService("TweenService"):Create(part, TweenInfo.new(Time), goal):Play()
end

script.Parent.Soil.Touched:Connect(function()
	if not debounce then
		debounce = true
		
		if not seedUsed then
			seedUsed = true
			
			goal.Transparency = 1
			TweenPart(script.Parent.Seed, 1, goal)
			wait(20)
			debounce = false
			
		elseif seedUsed and not sproutGrowing then
			sproutGrowing = true
			
			goal.Transparency = 0
			TweenPart(script.Parent.Sprout, 1, goal)
			wait(20)
			debounce = false
			
		elseif seedUsed and sproutGrowing and not flowerBloomed then
			flowerBloomed = true
			
			goal.Transparency = 1
			TweenPart(script.Parent.Sprout, 1, goal)
			wait(20)
			debounce = false
		end
	end
end)

Your system with multiple debounces was going in the right direction, but just made everything confusing, so I made this use variables to help determine which "phase" of growth the plant is in.

Also, I converted your for i = #, #, # loop to animate into TweenService, which makes it look a lot smoother, and removes some math to make it easier.

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