CoronaSDK最牛逼的动画库transitionsLib

1 transitionsLib之特性

  • 暂停、恢复或取消一个动画(或所有动画)
  • 为动画设置tag,允许多个动画共用同一个tag,使用tag来获取和操作动画
  • 以对象为粒度的动画操作,可以同时控制一个对象上所有的动画
  • 42种趋势(easing)函数,允许你以不同的方式来间补(插值)你的动画,例如二次函数、指数函数、伸缩方式、弹跳方式等
  • 拥有一些便捷函数,如blink(), moveTo(), moveBy(),等

2 基本transition

一个基本的transition可以以下面两种方式进行初始化:

  • transition.to( target, params ):这个方式会使用一个可选的趋势函数来变换一个displayObject或GroupObject,即在一段时间内移动、旋转、淡入淡出或伸缩
  • transition.from( target, params ):这和上面的方式相似,只是params里指定的值是初值,而在函数调用一刻对象的属性是终值。

第一个参数target,就是你打算变换(使其动起来)的display或group对象。

第二个参数params 是tagert的属性,以及下列名值对组成的表。这些特殊字段含义如下:

字段名 描述
time 指定动画经历的时间,单位是毫秒。
delay 指定动画开始前的毫秒延时,默认是0.
delta 指定对象的属性值,是否是相对数,默认为nil即false。设置成true属性值就成了相对值,否则是绝对值。
iterations 动画应该重复的次数。0或-1都会导致无限次重复。
tag 允许你设置的字符串,用来分类你的动画并分组控制他们。
transition 为你的transition指定趋势(easing)函数,以决定起始属性以何种方式变成最终属性。

动画动作对应要修改的对象属性,下表已经列出:

方式 属性(key) 描述
位移 x,y 从当前x/y移动到心的x/y
旋转 rotation 把当前角度旋转到新的角度
淡入淡出 alpha 把当前alpha值变成新的alpha值
伸缩 xScale,yScale 把x和y伸缩到新的比例
调整大小 width,height 把当前宽度和高度调节到新的宽度和高i度

注意,动画进程中的动画事件如下表所列。这些事件发生时就会激发指定的监听函数。同时在调用时,对象引用也会作为监听函数的唯一参数传入:

事件 描述
onStart 当Transition开始时被调用
onComplete 当Transition结束时被调用
onPause 当Transition被暂停时调用
onResume 当Transition被恢复时调用
onCancel 当Transition被取消时调用
onRepeat 当Transition完成一次重复周期时

下面是一些例子:

1) 在100毫秒内从当前位置,移动到y=100:

transition.to( myObject, { time=2000, y=100 } )

2)在2秒内,在y方向(垂直)向下移动100,这里用的是y进行相对改变:

transition.to( myObject, { time=2000, y=100, delta=true } )

3)2秒之内从当前位置移动到y=400的位置(outElastic表示到达目的后弹一弹),如此动作重复四次:

transition.to( myObject, { time=2000, y=400, iterations=4, transition=easing.outElastic } )

4)在4秒内从当前位置移动到x=200的位置并回到原处(continuousLoop 表示连续来回):

transition.to( myObject, { time=4000, x=200, transition=easing.continuousLoop } )

5)在2秒内,同时旋转45度,同时把y方向上延长2倍,同时透明度变成50%:

transition.to( myObject, { time=2000, rotation=45, yScale=2, alpha=0.5 } ) 

重要提示:

一些对象在transition期间并不会如你所愿。举个例子,许多widget并不支持伸缩或声明后修改大小,所以你对这些对象不能使用xScale、yScale、width、height这些属性。另一个例子是物理physics body:如果你用transition来伸缩或修改物理对象的大小实际的physics body将不会连同transiztion一起伸缩。

3 控制Transition

动画在结束前,可以被暂停、恢复和取消。传给控制函数的参数,将决定控制的目标范围。

  • 暂停:transition.pause(target)
  • 恢复:transition.resume(target)
  • 取消:transition.cancel(target)

这三个控制函数中的参数tagert可以为以下形式:

参数 范围
(none) target指向所有运行中的transition
transition reference target指向一个具体的transition,控制这个transition
object reference target指向一个display或group对象,控制这个对象上所有的transition
tag name(string) 指向所有tag和此字串一致的transition

4 趋势函数

默认情况下,从初值到终值的变化过程,是一个随时间线性改变的函数。

然而,你可以指定一个趋势函数来达到不同的效果,例如让一个对象快速地开始又逐步慢下来到达目的地。

设置方式如下:

--二次插值
transition.to( myObject, { time=2000, y=100, transition=easing.outQuad } )

--以指数插值的方式
transition.to( myObject, { time=2000, y=100, transition=easing.inOutExpo } )

5 Transition事件

  • onStart
  • onComplete
  • onPause
  • onResume
  • onCancel
  • onRepeat

代码示例如下:

local myObject = display.newRect( 0, 0, 100, 100 )

local function completeListener ( obj )
    --when this function is invoked, the object reference is passed instead of an ‘event‘ table
    print( "Transition completed on object: " .. tostring( obj ) )
end

transition.to( myObject, { time=2000, alpha=0, onComplete=completeListener } )

重要提示:

如果你从内存里删除或清除了一个发生动画的display对象,并且这个Transition有一个onComplete事件,这个监听函数仍然会被调用,尽管对象已经不在屏幕上了。所以,如果对象被强行删除,其Transition事件有可能会造成程序崩溃(事件里可能还在继续访问对象)。所以,正确的做法是,在删除对象之前先cancel这个对象上所有的Transition。即先transition.cancel(object)会很有帮助。

在更大的范围里,你还应该考虑在场景转场或模块被清除时,不带参数调用transition.cancel()以清除所有的Transition。

6 快捷函数

函数 描述
transition.blink() 闪烁
transition.dissolve() 溶解
transition.fadeIn() 淡入
transition.fadeOut() 淡出
transition.moveBy() 移动
transition.moveTo() 移到
transition.scaleBy() 伸缩
transition.scaleTo() 伸缩到
时间: 2024-10-28 12:00:48

CoronaSDK最牛逼的动画库transitionsLib的相关文章

二十岁出头,你一无所有,但你却拥有一切,因为你还有牛逼的梦想。 可那又怎样,只有行动,才能解除你所有的不安

我从来没有看到过一句话,如此让我共鸣.二十岁出头,你一无所有,但你却拥有一切,因为你还有牛逼的梦想. 可那又怎样,只有行动,才能解除你所有的不安 (一)嘴上说说的人生 那年我在离家的时候一个劲地往自己的硬盘里塞<灌篮高手>,我妈一副嗤之以鼻的表情 看着我,似乎是在说:"这么大的人了居然还这么喜欢看动漫." 我不知道怎么回应她,只好耸耸肩,因为我实在无法对我亲爱的娘亲说明这部动漫对我的 意义. 你知道,有些歌有些东西就是有那种力量.哪怕它在你的手机里藏了好几年,哪怕它早就 过

NineoldAndroids动画库源码分析

简介 做Android开发的同学很多都知道或者使用过一个动画库,那就是NineOldAndroids,它的作者及其牛X,好几个著名的开源库都是他的作品,具体大家可以看他的JakeWharton.简单来说,NineOldAndroids是一个向下兼容的动画库,主要是使低于API 11的系统也能够使用View的属性动画.以下是个其官网的简述 : Android library for using the Honeycomb (Android 3.0) animation API on all ver

如何成为一位牛逼的大咖

每个人都想过做一件牛逼的事情,做一个牛逼的项目,或者想成为一个牛逼的大咖.甚至我们还不懂到底什么是大咖,所谓的"大咖"其实就是在某个领域有这一定影响力,拥有众多的粉丝和号召力的人.如果想成为一位牛逼的大咖,那么你必须在某个领域有着自己的独有的价值.做大咖很多人以为会很舒服,人只要出了名什么好事都会轮到他.不但会获得很多的社会资源还有很多的商业价值.所以,能成为一位牛逼的大咖说明已经非常成功了,就是不操作什么项目也活得相当滋润了.很多人把我当成了大咖来向我讨教经验,其实我也不是什么大咖,

齐全的CSS3动画库animate.css

animate.css 是一个来自国外的 CSS3 动画库,它预设了抖动(shake).闪烁(flash).弹跳(bounce).翻转(flip).旋转(rotateIn/rotateOut).淡入淡出(fadeIn/fadeOut)等多达 60 多种动画效果,几乎包含了所有常见的动画效果. 查看演示

为什么我会认为SAP是世界上最好用最牛逼的ERP系统,没有之一?

为什么我认为SAP是世界上最好用最牛逼的ERP系统,没有之一?玩过QAD.Tiptop.用友等产品,深深觉得SAP是贵的有道理! 一套好的ERP系统,不仅能够最大程度承接适配企业的管理和业务流程,在技术上面也能够做到快速部署和挑战.而对用户而言,好用且逻辑性强,体验好.便利可掌控才是能够抓住用户的需求点.很可惜的是,纵观世界上这么多的ERP系统,真正能够为用户考虑而且有自己的核心竞争力的并不多. 我认为一套好的ERP系统,不仅仅是一套软件,更是一个管理思想.选型ERP,要从以下几方面考虑: 一.

基于轻量级高性能的CSS3动画库

简要教程 Repaintless.css是一款轻量级高性能的CSS3动画库.Repaintless.css通过特殊的方法来制作元素动画,不会引起页面的重绘,使它比其它CSS动画库具有更高的性能. 安装 你可以通过bower或npm来安装Repaintless.css. 1 $ bower install repaintless 2 $ npm install repaintless 使用方法 使用该CSS3动画库需要在页面中引入repaintless.css文件. 1 <link href=&quo

比较大小的牛逼代码

#include<iostream> using namespace std; int main(){ int x1,y1,x2,y2; while(cin>>x1>>y1>>x2>>y2){ if( x1> x2 ) x1^= x2^= x1^= x2; if( y1> y2 ) y1^= y2^= y1^= y2; } return 0; } 这段代码太牛逼了,自己现在看不懂,但是,真的好省力!!

Unity牛逼的2D纹理功能

[Unity牛逼的2D纹理功能] 1.可直接将贴图生成成为Cubemap. 2.自动生成Mipmap. 3.查看纹理被当前场景哪些对象引用.在Project窗口中,右击图像,选择 参考:file:///C:/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/html/en/Manual/class-TextureImporter.html

[转] iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么?

iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么? http://www.zhihu.com/question/23654895/answer/25541037 拿 Canvas 来和 Pop 比其实不大合适,虽然两者都自称「动画库」,但是「库」这个词的含义有所区别.本质上 Canvas 是一个「动画合集」而 Pop 是一个「动画引擎」. 先说 Canvas.Canvas 的目的是「Animate in Xcode Without Code」.开发者可以通过在 Storyboar