|
|
|
TweenFunc = TweenFunc or {}
|
|
local TweenFunc = TweenFunc
|
|
TweenFunc.LINEAR = "linear" --线性
|
|
TweenFunc.EASE_IN = "easeIn"
|
|
TweenFunc.EASE_OUT = "easeOut"
|
|
TweenFunc.EASE_IN_OUT = "easeInOut"
|
|
TweenFunc.EASE_OUT_IN = "easeOutIn"
|
|
TweenFunc.EASE_IN_BACK = "easeInBack"
|
|
TweenFunc.EASE_OUT_BACK = "easeOutBack"
|
|
TweenFunc.EASE_IN_OUT_BACK = "easeInOutBack"
|
|
TweenFunc.EASE_OUT_IN_BACK = "easeOutInBack"
|
|
TweenFunc.EASE_IN_ELASTIC = "easeInElastic"
|
|
TweenFunc.EASE_OUT_ELASTIC = "easeOutElastic"
|
|
TweenFunc.EASE_IN_OUT_ELASTIC = "easeInOutElastic"
|
|
TweenFunc.EASE_OUT_IN_ELASTIC = "easeOutInElastic"
|
|
TweenFunc.EASE_IN_BOUNCE = "easeInBounce"
|
|
TweenFunc.EASE_OUT_BOUNCE = "easeOutBounce"
|
|
TweenFunc.EASE_IN_OUT_BOUNCE = "easeInOutBounce"
|
|
TweenFunc.EASE_OUT_IN_BOUNCE = "easeOutInBounce"
|
|
TweenFunc.EASE_IN_TO_OUT_BACK = "easeInToOutBack"
|
|
TweenFunc.PINGPONG = "pingPong"
|
|
TweenFunc.EASE_OUT_QUINT = "easeOutQuint"
|
|
TweenFunc.EASE_IN_QUINT = "easeInQuint"
|
|
|
|
function TweenFunc.linear(ratio)
|
|
return ratio
|
|
end
|
|
function TweenFunc.easeIn(ratio)
|
|
return ratio * ratio * ratio
|
|
end
|
|
function TweenFunc.easeOut(ratio)
|
|
local invRatio = ratio - 1.0
|
|
return invRatio * invRatio * invRatio + 1
|
|
end
|
|
function TweenFunc.easeInOut(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeIn, TweenFunc.easeOut, ratio)
|
|
end
|
|
function TweenFunc.easeOutIn(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeOut, TweenFunc.easeIn, ratio)
|
|
end
|
|
function TweenFunc.easeInBack(ratio)
|
|
local s = 1.70158
|
|
return ratio * ratio * ((s + 1.0)*ratio - s)
|
|
end
|
|
function TweenFunc.easeOutBack(ratio)
|
|
local invRatio = ratio - 1.0
|
|
local s = 1.70158
|
|
return invRatio * invRatio * ((s + 1.0)*invRatio + s) + 1.0
|
|
end
|
|
function TweenFunc.easeInOutBack(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeInBack, TweenFunc.easeOutBack, ratio)
|
|
end
|
|
function TweenFunc.easeOutInBack(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeOutBack, TweenFunc.easeInBack, ratio)
|
|
end
|
|
function TweenFunc.easeInElastic(ratio)
|
|
if ratio == 0 or ratio == 1 then
|
|
return ratio
|
|
else
|
|
local p = 0.3
|
|
local s = p/4.0
|
|
local invRatio = ratio - 1
|
|
return -1.0 * math.pow(2.0, 10.0*invRatio) * math.sin((invRatio-s)*(2.0*math.pi)/p)
|
|
end
|
|
end
|
|
function TweenFunc.easeOutElastic(ratio)
|
|
if ratio == 0 or ratio == 1 then
|
|
return ratio
|
|
else
|
|
local p = 0.3
|
|
local s = p/4.0
|
|
return math.pow(2.0, -10.0*ratio) * math.sin((ratio-s)*(2.0*math.pi)/p) + 1
|
|
end
|
|
end
|
|
function TweenFunc.easeInOutElastic(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeInElastic, TweenFunc.easeOutElastic, ratio)
|
|
end
|
|
function TweenFunc.easeOutInElastic(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeOutElastic, TweenFunc.easeInElastic, ratio)
|
|
end
|
|
function TweenFunc.easeInBounce(ratio)
|
|
return 1.0 - TweenFunc.easeOutBounce(1.0 - ratio)
|
|
end
|
|
function TweenFunc.easeOutBounce(ratio)
|
|
local s = 7.5625
|
|
local p = 2.75
|
|
local l = nil
|
|
if ratio < (1.0/p) then
|
|
l = s * math.pow(ratio, 2)
|
|
else
|
|
if ratio < (2.0/p) then
|
|
ratio = ratio - 1.5/p
|
|
l = s * math.pow(ratio, 2) + 0.75
|
|
else
|
|
if ratio < 2.5/p then
|
|
ratio = ratio - 2.25/p
|
|
l = s * math.pow(ratio, 2) + 0.9375
|
|
else
|
|
ratio = ratio - 2.625/p
|
|
l = s * math.pow(ratio, 2) + 0.984375
|
|
end
|
|
end
|
|
end
|
|
return l
|
|
end
|
|
function TweenFunc.easeInOutBounce(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeInBounce, TweenFunc.easeOutBounce, ratio)
|
|
end
|
|
function TweenFunc.easeOutInBounce(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeOutBounce, TweenFunc.easeInBounce, ratio)
|
|
end
|
|
function TweenFunc.easeInToOutBack(ratio)
|
|
return TweenFunc.easeCombined(TweenFunc.easeIn, TweenFunc.easeOutBack, ratio)
|
|
end
|
|
function TweenFunc.easeCombined(startFunc, endFunc, ratio)
|
|
if ratio < 0.5 then
|
|
return 0.5 * startFunc(ratio*2.0)
|
|
else
|
|
return 0.5 * endFunc((ratio-0.5)*2.0) + 0.5
|
|
end
|
|
end
|
|
function TweenFunc.pingPong(ratio)
|
|
if ratio < 0.5 then
|
|
return TweenFunc.linear(ratio * 2)
|
|
else
|
|
return TweenFunc.linear( 2 - ratio * 2 )
|
|
end
|
|
end
|
|
function TweenFunc.easeOutQuint(ratio)
|
|
local invRatio = ratio - 1.0
|
|
return invRatio * invRatio * invRatio * invRatio * invRatio + 1
|
|
end
|
|
function TweenFunc.easeInQuint(ratio)
|
|
return ratio * ratio * ratio * ratio
|
|
end
|
|
|
|
TweenFunc[TweenFunc.LINEAR] = TweenFunc.linear
|
|
TweenFunc[TweenFunc.EASE_IN] = TweenFunc.easeIn
|
|
TweenFunc[TweenFunc.EASE_OUT] = TweenFunc.easeOut
|
|
TweenFunc[TweenFunc.EASE_IN_OUT] = TweenFunc.easeInOut
|
|
TweenFunc[TweenFunc.EASE_OUT_IN] = TweenFunc.easeOutIn
|
|
TweenFunc[TweenFunc.EASE_IN_BACK] = TweenFunc.easeInBack
|
|
TweenFunc[TweenFunc.EASE_OUT_BACK] = TweenFunc.easeOutBack
|
|
TweenFunc[TweenFunc.EASE_IN_OUT_BACK] = TweenFunc.easeInOutBack
|
|
TweenFunc[TweenFunc.EASE_OUT_IN_BACK] = TweenFunc.easeOutInBack
|
|
TweenFunc[TweenFunc.EASE_IN_ELASTIC] = TweenFunc.easeInElastic
|
|
TweenFunc[TweenFunc.EASE_OUT_ELASTIC] = TweenFunc.easeOutElastic
|
|
TweenFunc[TweenFunc.EASE_IN_OUT_ELASTIC] = TweenFunc.easeInOutElastic
|
|
TweenFunc[TweenFunc.EASE_OUT_IN_ELASTIC] = TweenFunc.easeOutInElastic
|
|
TweenFunc[TweenFunc.EASE_IN_BOUNCE] = TweenFunc.easeInBounce
|
|
TweenFunc[TweenFunc.EASE_OUT_BOUNCE] = TweenFunc.easeOutBounce
|
|
TweenFunc[TweenFunc.EASE_IN_OUT_BOUNCE] = TweenFunc.easeInOutBounce
|
|
TweenFunc[TweenFunc.EASE_OUT_IN_BOUNCE] = TweenFunc.easeOutInBounce
|
|
TweenFunc[TweenFunc.EASE_IN_TO_OUT_BACK] = TweenFunc.easeInToOutBack
|
|
TweenFunc[TweenFunc.PINGPONG] = TweenFunc.pingPong
|
|
TweenFunc[TweenFunc.EASE_OUT_QUINT] = TweenFunc.easeOutQuint
|
|
TweenFunc[TweenFunc.EASE_IN_QUINT] = TweenFunc.easeInQuint
|