TweenService doesn't complete tweens in specified time

I used a TweenInfo created as TweenInfo.new(9) to tween TextTransparency of a TextLabel and upon measuring the time it took to tween, it took only ~6 seconds instead of 9.

Repro.rbxl (14.7 KB)

Edit: It also seems playing a tween as soon as the game loads (e.g. immediately create and play a tween in a StarterGui LocalScript) causes it to complete instantly.

4 Likes

Do these bugs still occur? I was not able to reproduce them.

1 Like

Not able to reproduce any longer either. Will post here again if that changes.

I have just been able to get this issue. My tweens can be up to 20% off of the duration they’re actually meant to be. I’ve checked that it’s not tween.Completed firing too early. To reproduce, I’m just tweening the transparency of a part from 0 to 1, over 5 seconds with Linear EasingStyle. However I can replicate this with 1 second, and 10 second TweenInfo durations (the only one’s I’ve tested).

Transparency updated: 0.98572075366974 .  3.9243049621582 seconds in.
Transparency updated: 0.98993647098541 .  3.945249080658 seconds in.
Transparency updated: 0.9925183057785 .  3.9668910503387 seconds in.
Transparency updated: 0.99660396575928 .  3.9785261154175 seconds in.
Transparency updated: 0.99871790409088 .  3.9987909793854 seconds in.
Transparency updated: 1 .  4.0090310573578 seconds in.
-- tween.Completed fired
Intended duration: 5
Actual duration: 4.009192943573
Completed state: Enum.PlaybackState.Completed

As you can see, this is quite inaccurate.

Here is the code I’m using to make this issue, just place it in a script below a part.

local TweenService = game:GetService("TweenService")

local DURATION = 5

local part = script.Parent
local tweenInfo = TweenInfo.new(DURATION, Enum.EasingStyle.Linear)
local tween = TweenService:Create(part, tweenInfo, {Transparency = 1})

local startTick = tick()

print("Playing tween..")

part:GetPropertyChangedSignal("Transparency"):Connect(function()
print(string.format("Transparency updated: %s, %s seconds in.", part.Transparency, tick() - startTick))

end)

tween:Play()

local state = tween.Completed:Wait() 

print(string.format(
[[-- tween.Completed fired
Intended duration: %s
Actual duration: %s
Completed state: %s]],
DURATION, tick() - startTick, tostring(state)
))
3 Likes

Also getting this problem, tween completes instantly completely ignoring the tweeninfo duration.

This is still a problem. Using Jed’s code above, I was able to reproduce:
image

2 Likes