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

How do I correctly use Delta Time?

I'm working on an FPS game and one of the big problems is uncapped FPS for I use RenderStepped for pretty much everything in the Framework as well as other things. I realize this is bad practice for those such as myself wanting to play the game in a higher FPS but after reading a lot and a lot about Delta Time I just can't understand it, here's a code that I tried but it does nothing and I really just don't know what to do.

How it looks in 60 FPS

How it looks in 240 FPS

run.RenderStepped:Connect(function(deltaTime)

	local originalDeltaTime = deltaTime
	while deltaTime < 1/60+1/((1/originalDeltaTime)+4) do
		deltaTime = deltaTime + game:getService("RunService").RenderStepped:Wait()
		secrecoil()
	end
end)


function secrecoil()
	
	if cam:FindFirstChild(secondary.Name) then
		
		if secondary[secondary.Name].Flame.ParticleEmitter.Enabled == true then
			
			local random = math.random(2)
			
			if random == 1 then
		
		for i = 0,s.recup, .1 do
			
			camcf = camcf * s.recoil
			run.RenderStepped:Wait()
			
		end
		
		for i = 0,s.recdown, .1 do
			
			camcf = camcf * s.recoil2
					run.RenderStepped:Wait()
			
		
		end
			
		elseif random == 2 then
		
		for i = 0,s.recup, .1 do
			
			camcf = camcf * s.recoil3
					run.RenderStepped:Wait()
			
		end
		
		for i = 0,s.recdown, .1 do
			
			camcf = camcf * s.recoil4
					run.RenderStepped:Wait()
			
		
		end
			
			end
		end
	end
	
end

Anything would be helpful at this point. I wanna future proof this game and this is one of the big steps I gotta take.

1 answer

The usual way of making things framerate independant is to scale your movement by deltaTime. For example:

local speed = 20
local part = workspace.Part

RunService.RenderStepped:Connect(function(deltaTime)
	-- Multiplying by deltaTime here makes the movement framerate invariant 
	part.CFrame += part.CFrame.LookVector * speed * deltaTime
end)

If you just wanted to run a function roughly n times every second, then you could do it like this:

local elapsedTime = 0
local rate = 1 / 30 -- 30 times a second

RunService.RenderStepped:Connect(function(deltaTime)
	elapsedTime += deltaTime
	if elapsedTime >= rate then
		-- Run function here
		
		elapsedTime -= rate
	end
end)

1 comment

0

Even after using this function it still plays at the same speed no matter what the framerate is, the code still works just not as intended.

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