lua 动画

本文详细介绍了 Cocos2d-x 游戏引擎中的各种动作与动画效果,包括移动、旋转、缩放等基本动作,以及如何通过组合动作实现更复杂的动画效果。还介绍了补间动画,让动作速度变化更加丰富。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、延时概念

需要一定时间才能完成的动作、所以几乎所有的延时动作都使用执行时间作为参数、延时动作的共同基类是CCActionInstant类
cocos2d-x提供以下延时动作:

CCMoveTo:移动到、CCMoveBy:移动
CCRotateTo:旋转到、CCRotateBy:旋转
CCScaleTo:缩放到、CCScaleBy:缩放
CCSkewTo:切变到、CCSkewBy:切变
CCTintTo:颜色渐变到、CCTintBy:颜色渐变
CCFadeIn: 淡入、CCFadeOut: 淡出CCFadeTo:改变不透明度到
CCBlink:闪耀 设置闪烁次数
CCJumpTo:跳跃到、CCJumpBy:跳跃 设置跳跃高度和次数
CCBezierTo:贝塞尔曲线到、CCBezierBy:贝塞尔曲线

二、一些修饰动作类

1、CCRepeat:重复执行几次

local repeatAction = CCRepeat:actionWithAction(CCSequence:actionsWithArray(actions), 5)

2、CCRepeatForever:永久执行

3、CCSequence:按序列执行

local actions = CCArray:array()
actions:addObject(CCFadeOut:actionWithDuration(1))
actions:addObject(CCFadeIn:actionWithDuration(1))
sprite:runAction(CCRepeatForever:actionWithAction(CCSequence:actionsWithArray(actions)))

4、CCSpawn:同时执行

同步执行最后完成的时间由基本动作中用时最大者决定
action1 = CCMoveTo:actionWithDuration(2, ccp(50, 50))
action2 = CCRotateTo:actionWithDuration(2, 180)
action3 = CCScaleTo:actionWithDuration(1, 4)
action4 = CCScaleBy:actionWithDuration(1, 0)
sequence = CCSequence:actions(action3, action4)
sprite:runAction(CCSpawn:actions(action1, action2, sequence))

5、CCReverseTime 反动作

形成一种循环、CCxxxTo类通常不支持反动作,而CCXxxxBy类通常支持
moveTo = CCMoveTo:actionWithDuration(2, ccp(50, 50))
sequence = CCSequence:actions(moveTo,CCReverseTime:actionWithAction(moveTo))

6、CCAnimate 动画类

local action = CCAnimate:actionWithAnimation(animation)
sprite:runAction(CCRepeat:actionWithAction(action, 10))

7、CCDelayTime 延时等待类

action1 = CCMoveBy:actionWithDuration(1.2, ccp(200, 200))
action2 = CCMoveBy:actionWithDuration(1.2, ccp(200, 200))
sprite->runAction(CCSequence:actions(action1, CCDelayTime:actionWithDuration(1),action2))

8、CCProgressFromTo与CCProgressTo 进度动作

进度动作的执行节点为CCProgressTimer、而不是我们常用的CCSprite
--时间 百分比
to1 = CCProgressTo::actionWithDuration(2, 100);         
leftToRight = CCProgressTimer:progressWithFile( “123.png”)
leftToRight:setScale(0.95)
leftToRight:setAnchorPoint(CCPointMake(0.5, 0.5))
leftToRight:setPosition(PT(WINSIZE.width/2,60))
--顺时针、逆时针、左、右、上、下(枚举 0 1 2...)
leftToRight:setType(Type)
leftToRight->runAction( CCRepeatForever::actionWithAction(to1))

9、CCGridAction 网格动作类集

网格动作,是一种特殊的变换效果、类似于特效、可以实现全屏幕的,翻转,抖动,震荡,水波纹等。
CCGridAction是所有网格动作的基类、他有两个派生类、
CCTiledGrid3DAction:基于Tiled的网格动作、CCGrid3DAction:普通网格动作

三、补间动画(速度变化)

基本动作和组合动作实现了针对精灵的各种运动和动画效果、但它们的速度通常是恒定不变的
通过CCActionEase类系和CCSpeed类、我们可以很方便地改变精灵执行动作的快慢
CCEaseIn - 由慢至快(速度线性变化)
CCEaseOut - 由快至慢
CCEaseInOut - 由慢至快再由快至慢
CCEaseSineIn - 由慢至快(速度正弦变化)
CCEaseSineOut - 由快至慢
CCEaseSineInOut - 由慢至快再由快至慢
CCEaseExponentialIn - 由慢至极快(速度指数级变化)
CCEaseExponentialOut - 由极快至慢
CCEaseExponentialInOut - 由慢至极快再由极快至慢
CCSpeed - 人工设定速度,还可通过setSpeed不断调整

Lua是一门轻量级脚本语言,而`ValueAnimator`实际上是Android开发框架中的一个组件,并非属于Lua的一部分内容。不过我们可以从两个方面分别解释。 ### 关于 ValueAnimator (Android) 在Android中,`ValueAnimator`是一个用于生成动画值的对象。它本身并不直接操作UI视图,而是通过不断计算某一范围内变化的数值,将这个过程暴露给开发者以便应用到各种属性上(例如透明度、大小等)。以下是其基本使用流程: 1. 创建 `ValueAnimator` 实例并设置起始值和结束值; ```java ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f); ``` 2. 设置持续时间及插值器(控制速度曲线的变化模式),如线性加速减速等等; ```java animator.setDuration(1000); // 持续时间为1秒 animator.setInterpolator(new AccelerateDecelerateInterpolator()); ``` 3. 添加监听器更新目标对象的状态; ```java animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float)animation.getAnimatedValue(); myView.setAlpha(value); // 假设改变的是alpha值 } }); ``` 4. 启动动画。 ```java animator.start(); ``` 如果想了解如何在 Lua 中实现类似的功能,则需要借助特定的游戏引擎或框架支持,比如 Corona SDK 或 LÖVE 等都提供了一定程度的时间轴控制能力来进行视觉效果渲染。 对于希望跨平台使用的场景下可以考虑学习一些同时兼容两者的中间件解决方案,但是这通常意味着额外的学习成本以及对底层原理更深入的理解需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值