I am facing yet again this problem where I am giving a pause() and yet again its not pausing on command. I am baffled with this problem. I have done a post about this but on a rotating tween service here, which was solved.
Can someone please explain why this is happening? and possible fixes?
TweenService = game:GetService("TweenService")
local os1 = script.Parent.Parent.Parent
local part = script.Parent
local tweenInfo = TweenInfo.new(
3, -- Time
Enum.EasingStyle.Linear, -- EasingStyle
Enum.EasingDirection.Out, -- EasingDirection
-1, -- RepeatCount (when less than zero the tween will loop indefinitely)
true, -- Reverses (tween will reverse once reaching it's goal)
2 -- DelayTime
)
local tween = TweenService:Create(part, tweenInfo, {CFrame = CFrame.new(533.024, 85.495, -107.397)})
local function pauseTween()
local PlaybackState = tween.PlaybackState
if PlaybackState ~= Enum.PlaybackState.Paused then
print("Pausing")
tween:Pause()
end
end
local function playTween()
local PlaybackState = tween.PlaybackState
if PlaybackState ~= Enum.PlaybackState.Playing then
print("Playing")
tween:Play()
end
end
tween:GetPropertyChangedSignal("PlaybackState"):Connect(function()
local PlaybackState = tween.PlaybackState
--if PlaybackState == Enum.PlaybackState.Playing or PlaybackState == Enum.PlaybackState.Paused then
print(tostring(PlaybackState))
--end
end)
playTween()
wait(10)
pauseTween()
wait(10)
playTween()
wait(10)
pauseTween()
wait(10)
playTween()
wait(10)
pauseTween()
wait(10)
playTween()
wait(10)
pauseTween()
print("Completed")
its because its searching if its pause before pausing it you should revert it like this:
local function pauseTween()
local PlaybackState = tween.PlaybackState
if PlaybackState ~= Enum.PlaybackState.Playing then --change it to playing
print("Pausing")
tween:Pause()
end
end
local function playTween()
local PlaybackState = tween.PlaybackState
if PlaybackState ~= Enum.PlaybackState.Paused then --change it to pause
print("Playing")
tween:Play()
end
end
Hey, this is because the tween is entering the Enum.PlaybackState.Delayed state as you’re pausing it. (the 2 second delay time you’ve set in tweenInfo)
This should work with your code. I just added an extra variable that double checks if a tween if supposed to be paused or running.
TweenService = game:GetService("TweenService")
local os1 = script.Parent.Parent.Parent
local part = script.Parent
local tweenInfo = TweenInfo.new(
3, -- Time
Enum.EasingStyle.Linear, -- EasingStyle
Enum.EasingDirection.Out, -- EasingDirection
-1, -- RepeatCount (when less than zero the tween will loop indefinitely)
true, -- Reverses (tween will reverse once reaching it's goal)
2 -- DelayTime
)
local tween = TweenService:Create(part, tweenInfo, {CFrame = CFrame.new(533.024, 85.495, -107.397)})
local running = false
local function pauseTween()
local PlaybackState = tween.PlaybackState
print("Pausing")
running = false
tween:Pause()
end
local function playTween()
local PlaybackState = tween.PlaybackState
print("Playing")
running = true
tween:Play()
end
tween:GetPropertyChangedSignal("PlaybackState"):Connect(function()
local PlaybackState = tween.PlaybackState
if PlaybackState == Enum.PlaybackState.Playing and running == false then
tween:Pause()
elseif PlaybackState == Enum.PlaybackState.Paused and running == true then
tween:Play()
end
--if PlaybackState == Enum.PlaybackState.Playing or PlaybackState == Enum.PlaybackState.Paused then
print(tostring(PlaybackState))
--end
end)
playTween()
wait(10)
pauseTween()
wait(10)
playTween()
wait(10)
pauseTween()
wait(10)
playTween()
wait(10)
pauseTween()
wait(10)
playTween()
wait(10)
pauseTween()
print("Completed")