找回密码
马上加入

QQ登录

只需一步,快速开始

搜索
发新帖

0

收听

0

听众

2

主题
发表于 2024-7-10 15:03:27 | 查看: 441| 回复: 4
-- 封装常用动画功能
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
发表于 2024-7-10 15:03:43 IP属地:安徽省安庆市

-- 翻转效果 -- 模拟控件从一面翻转到另一面的效果。 function Animation.flipEffect(widget, duration) local rotateHalf = GUI:ActionRotateBy(duration / 2, 90) local rotateFull = GUI:ActionRotateBy(duration / 2, 90) local sequence = GUI:ActionSequence(rotateHalf, rotateFull) GUI:runAction(widget, sequence) end

-- 弹跳效果 -- 模拟控件弹跳的效果。 function Animation.bounceEffect(widget, duration) local moveUp = GUI:ActionMoveBy(0.2, 0, 50) local moveDown = GUI:ActionMoveBy(0.2, 0, -50) local sequence = GUI:ActionSequence(moveUp, moveDown)

if duration == 0 then
    local repeatForever = GUI:ActionRepeatForever(sequence)
    GUI:runAction(widget, repeatForever)
else
    local repeatAction = GUI:ActionRepeat(sequence, math.ceil(duration / 0.4))
    GUI:runAction(widget, repeatAction)
end

end

-- 弹性放大效果 -- 模拟控件弹性放大的效果。 function Animation.elasticScaleEffect(widget, duration) local scaleUp = GUI:ActionScaleTo(0.2, 1.2) local scaleDown = GUI:ActionScaleTo(0.2, 0.8) local scaleNormal = GUI:ActionScaleTo(0.2, 1.0) local sequence = GUI:ActionSequence(scaleUp, scaleDown, scaleNormal)

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.breathingScaleEffect(widget, duration) local scaleUp = GUI:ActionScaleTo(0.8, 1.1) local scaleDown = GUI:ActionScaleTo(0.8, 1.0) 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.6))
    GUI:runAction(widget, repeatAction)
end

end

-- 滚动文字效果 -- 模拟文字从一端滚动到另一端的效果。 function Animation.scrollTextEffect(widget, duration, startX, endX, y) local moveToStart = GUI:ActionMoveTo(0, startX, y) local moveToEnd = GUI:ActionMoveTo(duration, endX, y) local sequence = GUI:ActionSequence(moveToStart, moveToEnd)

if duration == 0 then
    local repeatForever = GUI:ActionRepeatForever(sequence)
    GUI:runAction(widget, repeatForever)
else
    local repeatAction = GUI:ActionRepeat(sequence, math.ceil(duration))
    GUI:runAction(widget, repeatAction)
end

end -- 滚动文字效果,无限循环,从左到右滚动 -- scrollTextEffect(widget, 0, -100, 500, 100)

-- 滚动文字效果,持续10秒,从左到右滚动 -- scrollTextEffect(widget, 10, -100, 500, 100)

回复 显示全部楼层 道具 举报

发表于 2024-8-5 15:02:14 IP属地:山东省济南市

好学习了,共同进步

回复 显示全部楼层 道具 举报

发表于 2024-10-3 17:39:51 IP属地:江苏省徐州市

学习了,谢谢大佬分享

回复 显示全部楼层 道具 举报

发表于 2024-11-12 11:48:05 IP属地:山东省淄博市
6666666666666666666666

回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 马上加入

QQ|Archiver|手机版|小黑屋|alg阿灵戈社区 ( 苏ICP备2023026137号-1|苏ICP备2023026137号-1 )

GMT+8, 2025-3-12 23:29 , Processed in 1.121984 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表