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

How can I make base speed increase when holding down a button?

So I am trying to making speed increase when you hold down a button, I was only able to make it increase when clicking a key again and again. This is what I have rn.

game.ReplicatedStorage.Takeoff.OnServerEvent:connect(function(client, event, data)
	if event == "On" and client == player then
		bv.maxForce = Vector3.new(math.huge, math.huge, math.huge)
		bg.maxTorque = Vector3.new(math.huge, math.huge, math.huge)
	elseif event == "Speed" and client == player then	
		baseSpeed = baseSpeed + 10
	elseif event == "Slow" and client == player then	
		baseSpeed = baseSpeed - 5
	elseif event == "Fly" and client == player then
		bg.CFrame = data
		direction = bg.CFrame.lookVector
		direction = Vector3.new(direction.X, direction.Y, direction.Z).unit
		bv.Velocity = direction*baseSpeed
	elseif event == "Off" and client == player then
		bv.maxForce = Vector3.new(0,0,0)
		bg.maxTorque = Vector3.new(0,0,0)
	end
end)a

2 answers

I don't quite get each variables used in the script. It's always good to give a background on the variables used, so we could determine what it does, how it triggers, or act.

I suggest creating a variable named "keyOnHold". On Gui.MouseButton1Down (if mouse is held down), set keyOnHold to true. Then put everything on a loop that goes on while keyOnHold is true.

On Gui.MouseButton1Up (if mouse is released), set keyOnHold to false. That will stop the loop.

*Note that Gui.MouseButton1Down checks if the button is held down. It is different from Gui.MouseButton1Click, which checks if the button was both held down AND released (simply, clicked).

local keyOnHold = false
local button = Gui.Button

while keyOnHold do
     --Add code on manipulating speed
end

button.MouseButton1Down:Connect(function() keyOnHold = true end) 
button.MouseButton1Up:Connect(function() keyOnHold = false end)

User input service has a function called "IsKeyDown" (im gonna reference user input service as uis)

here is some example code that might get you on the right path.

local delay = 0.1
local speed = 0

while wait(delay) do -- I would usually use a custom wait function here
	if uis:IsKeyDown(Enum.KeyCode.W) then -- IsKeyDown takes one parameter, a keycode
		speed += 1
	else
		speed = 0 -- this means that they are no longer holding the key, so lets reset the value.
	end
end

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