after learning how to use Bézier Curves I tried to tween a Image label, yeah didn’t end well.
my script:
function lerp(a, b, c)
return a + (b - a) * c
end
function quadBezier(t, p0, p1, p2)
local l1 = lerp(p0, p1, t)
local l2 = lerp(p1, p2, t)
local quad = lerp(l1, l2, t)
return quad
end
local template1 = script.Parent.Template1
template1:TweenPosition(quadBezier(template1, UDim2.new(0, 0,0.92, 0), UDim2.new(0.496, 0,0.122, 0), UDim2.new(0.496, 0,0.122, 0)))
my error:
Players.Furkan5E.PlayerGui.ScreenGui.Background.LocalScript:2: attempt to perform arithmetic (mul) on UDim2 and Instance
pretty sure I need convert something but not sure.
local template1 = script.Parent.Template1
function lerp(a, b, c)
return a + (b - a) * c
end
function quadBezier(t, p0, p1, p2)
local l1 = lerp(p0, p1, t)
local l2 = lerp(p1, p2, t)
local quad = lerp(l1, l2, t)
return quad
end
template1:TweenPosition(quadBezier(template1, UDim2.new(0, 0,0.92, 0), UDim2.new(0.496, 0,0.122, 0), UDim2.new(0.496, 0,0.122, 0)))
local RunService = game:GetService("RunService")
-- // Functions
function lerp(a, b, c)
return a + (b - a) * c
end
function quadBezier(t, p0, p1, p2)
local l1 = lerp(p0, p1, t)
local l2 = lerp(p1, p2, t)
local quad = lerp(l1, l2, t)
return quad
end
function tweenObject(object, pos1, pos2, pos3)
for i = 1, 100 do
local t = i/100
local XScale = quadBezier(t, pos1.X.Scale, pos2.X.Scale, pos3.X.Scale)
local YScale = quadBezier(t, pos1.Y.Scale, pos2.Y.Scale, pos3.Y.Scale)
local XOffset = quadBezier(t, pos1.X.Offset, pos2.X.Offset, pos3.X.Offset)
local YOffset = quadBezier(t, pos1.Y.Offset, pos2.Y.Offset, pos3.Y.Offset)
object.Position = UDim2.new(XScale, XOffset, YScale, YOffset)
RunService.RenderStepped:Wait()
end
end
local RunService = game:GetService("RunService")
local template1 = script.Parent.Template1
function lerp(a, b, c)
return a + (b - a) * c
end
function quadBezier(t, p0, p1, p2)
local l1 = lerp(p0, p1, t)
local l2 = lerp(p1, p2, t)
local quad = lerp(l1, l2, t)
return quad
end
function tweenObject(object, pos1, pos2, pos3)
for i = 1, 100 do
local t = i/100
local XScale = quadBezier(t, pos1.X.Scale, pos2.X.Scale, pos3.X.Scale)
local YScale = quadBezier(t, pos1.Y.Scale, pos2.Y.Scale, pos3.Y.Scale)
local XOffset = quadBezier(t, pos1.X.Offset, pos2.X.Offset, pos3.X.Offset)
local YOffset = quadBezier(t, pos1.Y.Offset, pos2.Y.Offset, pos3.Y.Offset)
object.Position = UDim2.new(XScale, XOffset, YScale, YOffset)
RunService.RenderStepped:Wait()
end
end
tweenObject(template1, UDim2.new(0, 0,0.92, 0), UDim2.new(0.496, 0,0.122, 0), UDim2.new(0.496, 0,0.122, 0))
Parameters #3 and #4 are identical, which results in your code-breaking. If you were to change parameter #4 to something else, let’s say UDim2.new(1, 0, 0.122, 0), we would get a better result.