-- 封装常用动画功能
Animation = {}
-- 运行动作
function Animation.runAction(widget, action)
GUI:runAction(widget, action)
end
-- 停止所有动作
function Animation.stopAllActions(widget)
GUI:stopAllActions(widget)
end
-- 停止指定标记的动作
function Animation.stopActionByTag(widget, tag)
GUI:stopActionByTag(widget, tag)
end
-- 移动到指定位置
function Animation.moveTo(widget, time, x, y)
local action = GUI:ActionMoveTo(time, x, y)
Animation.runAction(widget, action)
end
-- 相对位置移动
function Animation.moveBy(widget, time, x, y)
local action = GUI:ActionMoveBy(time, x, y)
Animation.runAction(widget, action)
end
-- 缩放到指定比例
function Animation.scaleTo(widget, time, ratioX, ratioY)
local action
if ratioY then
action = GUI:ActionScaleTo(time, ratioX, ratioY)
else
action = GUI:ActionScaleTo(time, ratioX)
end
Animation.runAction(widget, action)
end
-- 相对缩放
function Animation.scaleBy(widget, time, ratioX, ratioY)
local action
if ratioY then
action = GUI:ActionScaleBy(time, ratioX, ratioY)
else
action = GUI:ActionScaleBy(time, ratioX)
end
Animation.runAction(widget, action)
end
-- 旋转到指定角度
function Animation.rotateTo(widget, time, angle)
local action = GUI:ActionRotateTo(time, angle)
Animation.runAction(widget, action)
end
-- 相对旋转
function Animation.rotateBy(widget, time, angle)
local action = GUI:ActionRotateBy(time, angle)
Animation.runAction(widget, action)
end
-- 淡入
function Animation.fadeIn(widget, time)
local action = GUI:ActionFadeIn(time)
Animation.runAction(widget, action)
end
-- 淡出
function Animation.fadeOut(widget, time)
local action = GUI:ActionFadeOut(time)
Animation.runAction(widget, action)
end
-- 闪烁
function Animation.blink(widget, time, num)
local action = GUI:ActionBlink(time, num)
Animation.runAction(widget, action)
end
-- 延迟
function Animation.delay(widget, time, callback)
local action = GUI:ActionSequence(GUI:DelayTime(time), GUI:CallFunc(callback))
Animation.runAction(widget, action)
end
-- 显示
function Animation.show(widget)
local action = GUI:ActionShow()
Animation.runAction(widget, action)
end
-- 隐藏
function Animation.hide(widget)
local action = GUI:ActionHide()
Animation.runAction(widget, action)
end
-- 移除自身
function Animation.removeSelf(widget)
local action = GUI:ActionRemoveSelf()
Animation.runAction(widget, action)
end
-- 顺序播放动作
function Animation.sequence(widget, ...)
local actions = {...}
local action = GUI:ActionSequence(actions)
Animation.runAction(widget, action)
end
-- 同时播放动作
function Animation.spawn(widget, ...)
local actions = {...}
local action = GUI:ActionSpawn(actions)
Animation.runAction(widget, action)
end
-- 循环播放动作
function Animation.repeatAction(widget, action, time)
local repeatAction = GUI:ActionRepeat(action, time)
Animation.runAction(widget, repeatAction)
end
-- 永久循环播放动作
function Animation.repeatForever(widget, action)
local repeatAction = GUI:ActionRepeatForever(action)
Animation.runAction(widget, repeatAction)
end
-- 贝塞尔曲线运动
function Animation.bezierTo(widget, time, controlPoint_1, controlPoint_2, endPosition)
local action = GUI:ActionBezierTo(time, controlPoint_1, controlPoint_2, endPosition)
Animation.runAction(widget, action)
end
-- 指数缓冲动作
function Animation.easeExponentialIn(widget, action)
local easeAction = GUI:ActionEaseExponentialIn(action)
Animation.runAction(widget, easeAction)
end
function Animation.easeExponentialOut(widget, action)
local easeAction = GUI:ActionEaseExponentialOut(action)
Animation.runAction(widget, easeAction)
end
function Animation.easeExponentialInOut(widget, action)
local easeAction = GUI:ActionEaseExponentialInOut(action)
Animation.runAction(widget, easeAction)
end
--按钮点击缩放动画
function Animation.buttonClickEffect(button)
local scaleUp = GUI:ActionScaleTo(0.1, 1.2)
local scaleDown = GUI:ActionScaleTo(0.1, 1)
local sequence = GUI:ActionSequence(scaleUp, scaleDown)
GUI:runAction(button, sequence)
end
--列表项滑动动画
function Animation.slideInFromLeft(widget, duration, distance)
local currentPos = GUI:getPosition(widget)
GUI:setPosition(widget, currentPos.x - distance, currentPos.y)
local moveAction = GUI:ActionMoveTo(duration, currentPos.x, currentPos.y)
GUI:runAction(widget, moveAction)
end
function Animation.slideOutToRight(widget, duration, distance)
local currentPos = GUI:getPosition(widget)
local moveAction = GUI:ActionMoveTo(duration, currentPos.x + distance, currentPos.y)
GUI:runAction(widget, moveAction)
end
--心跳放大缩小动画
function Animation.heartbeatEffect(widget, duration)
local scaleUp = GUI:ActionScaleTo(0.5, 1.2)
local scaleDown = GUI:ActionScaleTo(0.5, 1)
local sequence = GUI:ActionSequence(scaleUp, scaleDown)
if duration == 0 then
local repeatForever = GUI:ActionRepeatForever(sequence)
GUI:runAction(widget, repeatForever)
else
local repeatAction = GUI:ActionRepeat(sequence, math.ceil(duration / 1.0))
GUI:runAction(widget, repeatAction)
end
end
--摇晃动画
function Animation.shakeEffect(widget, duration)
local moveLeft = GUI:ActionMoveBy(0.05, -10, 0)
local moveRight = GUI:ActionMoveBy(0.05, 20, 0)
local moveLeftBack = GUI:ActionMoveBy(0.05, -20, 0)
local moveRightBack = GUI:ActionMoveBy(0.05, 10, 0)
local sequence = GUI:ActionSequence(moveLeft, moveRight, moveLeftBack, moveRightBack)
if duration == 0 then
local repeatForever = GUI:ActionRepeatForever(sequence)
GUI:runAction(widget, repeatForever)
else
local repeatAction = GUI:ActionRepeat(sequence, math.ceil(duration / 0.2))
GUI:runAction(widget, repeatAction)
end
end
-- 呼吸灯效果
-- 模拟呼吸灯的效果,即逐渐变亮和变暗。
function Animation.breathingLightEffect(widget, duration)
local fadeIn = GUI:ActionFadeIn(0.8)
local fadeOut = GUI:ActionFadeOut(0.8)
local sequence = GUI:ActionSequence(fadeIn, fadeOut)
if duration == 0 then
local repeatForever = GUI:ActionRepeatForever(sequence)
GUI:runAction(widget, repeatForever)
else
local repeatAction = GUI:ActionRepeat(sequence, math.ceil(duration / 1.6))
GUI:runAction(widget, repeatAction)
end
end
-- 摆动效果
-- 模拟一个控件来回摆动的效果。
function Animation.swingEffect(widget, duration)
local rotateLeft = GUI:ActionRotateBy(0.1, -10)
local rotateRight = GUI:ActionRotateBy(0.2, 20)
local rotateLeftBack = GUI:ActionRotateBy(0.2, -20)
local rotateRightBack = GUI:ActionRotateBy(0.1, 10)
local sequence = GUI:ActionSequence(rotateLeft, rotateRight, rotateLeftBack, rotateRightBack)
if duration == 0 then
local repeatForever = GUI:ActionRepeatForever(sequence)
GUI:runAction(widget, repeatForever)
else
local repeatAction = GUI:ActionRepeat(sequence, math.ceil(duration / 0.6))
GUI:runAction(widget, repeatAction)
end
end
-- 闪烁效果
-- 让控件快速闪烁多次。
function Animation.blinkEffect(widget, duration)
local blink = GUI:ActionBlink(duration, math.ceil(duration * 5))
GUI:runAction(widget, blink)
end
-- 组合动画效果
-- 将移动、缩放和旋转组合在一起,形成复杂的动画效果。
function Animation.complexEffect(widget, duration)
local moveBy = GUI:ActionMoveBy(0.5, 50, 50)
local rotateBy = GUI:ActionRotateBy(0.5, 45)
local scaleUp = GUI:ActionScaleTo(0.5, 1.5)
local scaleDown = GUI:ActionScaleTo(0.5, 1)
local moveBack = GUI:ActionMoveBy(0.5, -50, -50)
local rotateBack = GUI:ActionRotateBy(0.5, -45)
local sequence = GUI:ActionSequence(moveBy, rotateBy, scaleUp, scaleDown, moveBack, rotateBack)
if duration == 0 then
local repeatForever = GUI:ActionRepeatForever(sequence)
GUI:runAction(widget, repeatForever)
else
local repeatAction = GUI:ActionRepeat(sequence, math.ceil(duration / 3.0))
GUI:runAction(widget, repeatAction)
end
end
return Animation