本指南讨论如何使用 Corona transition 库在特定时间段内移动、旋转、淡入淡出或缩放显示对象/组。
可以使用以下函数之一启动基本过渡
transition.to( target, params )
— 此函数使用可选的缓动函数对 显示对象 或 显示组 进行过渡(动画)。使用此函数可在特定时间段内移动、旋转、淡入淡出或缩放对象。
transition.from( target, params )
— 此函数与 transition.to()
类似,不同之处在于起始属性值在参数表中指定,最终值是调用之前对象的相应属性值。
任一函数中的第一个参数 target
都是您希望进行过渡的显示对象或组。第二个参数 params
是一个键值对表。在此表中,为过渡指定适当的控制参数
控制 | 描述 |
---|---|
time |
指定过渡的持续时间(以毫秒为单位)。 |
delay |
指定过渡开始前的延迟时间(以毫秒为单位)。默认为 0 (无)。 |
delta |
指定最终对象属性是特定值还是值的更改。默认为 nil ,表示 false 。 |
iterations |
过渡应重复的次数(整数)。0 或 -1 将导致过渡永远重复。 |
tag |
字符串值,允许您对过渡进行分类并一起控制它们。请参阅 控制过渡。 |
transition |
指定用于过渡的 缓动 函数。请参阅 缓动函数。 |
要影响最终对象属性,可以使用以下方法。在 params
表中,指定每个适当的 属性 及其最终值。
方法 | 属性(键) | 描述 |
---|---|---|
move | x , y |
将对象从其当前的 x/y 坐标移动到另一个坐标。 |
rotate | rotation |
将对象从其当前角度旋转到另一个角度。 |
fade | alpha |
将对象的 alpha 值从当前值淡入淡出到另一个值。 |
scale | xScale , yScale |
将对象缩放到特定的 x 比例或 y 比例。 |
字体大小 | size |
仅当目标是 TextObject 时适用。这将过渡文本对象的字体大小。 |
resize | width , height |
将对象从其当前宽度/高度调整为另一个宽度/高度。 |
distort | x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 |
仅当目标是 RectPath 时适用,适用于 ShapeObject。这些属性控制目标的四边形变形。 |
填充效果 | (各种) | 仅当目标是应用于 ShapeObject 的 fill.effect 时适用。在这种情况下,属性(键)表示与特定滤镜效果关联的效果属性,例如 ShapeObject.fill.effect.intensity 。有关哪些滤镜参数适用于每个滤镜,请参阅效果指南。 |
请注意,过渡支持下面列出的所有过渡事件。当过渡上发生该事件时,这些标志将触发指定的侦听器函数。调用时,对象引用作为唯一参数传递给侦听器函数。有关详细信息,请参阅 过渡事件。
事件 | 描述 |
---|---|
onStart |
过渡开始时调用的侦听器函数。 |
onComplete |
过渡完成后调用的侦听器函数。 |
onPause |
暂停活动过渡时调用的侦听器函数。 |
onResume |
恢复暂停的过渡时调用的侦听器函数。 |
onCancel |
取消活动过渡时调用的侦听器函数。 |
onRepeat |
活动过渡完成迭代周期时调用的侦听器函数。 |
transition.to( myObject, { time=2000, y=100 } )
delta
属性设置为 true
。在以下示例中,对象将从其起始 y 位置向下移动 100 像素。请注意,相同的原则可以应用于任何属性更改。transition.to( myObject, { time=2000, y=100, delta=true } )
iterations
参数重复 4 次,并使用 transition
参数应用弹性插值效果。transition.to( myObject, { time=2000, y=400, iterations=4, transition=easing.outElastic } )
params
表中声明所有三个属性更改transition.to( myObject, { time=2000, rotation=45, yScale=2, alpha=0.5 } )
过渡可以在完成前暂停、恢复或取消。传递给控制函数的参数决定了操作的范围。
可以使用 transition.pause() 和 transition.pauseAll() 函数暂停过渡。这些函数仅影响正在运行的过渡。
使用 transition.pause() 函数,您可以通过使用的参数来控制要暂停的特定过渡。
参数 | 范围 |
---|---|
(无) | 暂停所有正在运行的过渡。 |
过渡引用 | 暂停特定的正在运行的过渡。 |
对象引用 | 暂停特定对象上所有正在运行的过渡。 |
标签名称(字符串) | 暂停共享同一标签名称的所有正在运行的过渡。 |
可以使用 transition.resume() 和 transition.resumeAll() 函数恢复过渡。这些函数仅影响已暂停的过渡。
使用 transition.resume() 函数,您可以通过使用的参数来控制要恢复的特定过渡。
参数 | 范围 |
---|---|
(无) | 恢复所有暂停的过渡。 |
过渡引用 | 恢复特定的暂停过渡。 |
对象引用 | 恢复特定对象上所有暂停的过渡。 |
标签名称(字符串) | 恢复共享同一标签名称的所有暂停过渡。 |
可以使用 transition.cancel() 和 transition.cancelAll() 函数取消过渡。请注意,过渡将停止在原地 - 它们不会恢复到其起始状态或跳到结束状态。这些函数仅影响当前正在运行或暂停的过渡。
使用 transition.cancel() 函数,您可以通过使用的参数来控制要取消的特定过渡。
参数 | 范围 |
---|---|
(无) | 取消所有正在运行/暂停的过渡。 |
过渡引用 | 取消特定的正在运行/暂停的过渡。 |
对象引用 | 取消特定对象上所有正在运行/暂停的过渡。 |
标签名称(字符串) | 取消共享同一标签名称的所有正在运行/暂停的过渡。 |
如果您在显示对象已被移除后意外地将对其的引用传递给 transition.pause()、transition.resume() 或 transition.cancel(),则该参数将为 nil
。这与不向函数传递任何参数相同,这将导致所有过渡被暂停、恢复或取消(取决于函数)。
为了避免此默认行为,您可以在引用过渡库后在项目中包含以下代码行
transition.ignoreEmptyReference = true
如果将 transition.ignoreEmptyReference
设置为 true
(默认为 false
),则将 nil
或不向这三个函数传递任何参数将被忽略,并且不会发生任何事情。您可以随时使用 transition.pauseAll()、transition.resumeAll() 和 transition.cancelAll() 来控制所有过渡。
默认情况下,过渡以从起始值到结束值的恒定线性变化率发生。但是,您可能希望使用 缓动 效果来实现不同的结果,例如,使对象在开始时快速移动,并在到达目的地时逐渐减速。可以使用 缓动库 函数结合过渡调用来实现此行为。
要在过渡上设置缓动效果,只需在 params
表中提供 transition
键,其值等于 缓动库 函数之一
--transition the object out with quadratic interpolation transition.to( myObject, { time=2000, y=100, transition=easing.outQuad } ) --transition the object in, then back out, with exponential interpolation transition.to( myObject, { time=2000, y=100, transition=easing.inOutExpo } )
Corona 支持全方位的过渡事件,包括
onStart
onComplete
onPause
onResume
onCancel
onRepeat
要从过渡触发事件响应,请将所需的事件键添加到 params
表中,以及应调用的侦听器函数。
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 } )
如果您从内存中移除或清除正在过渡的对象,并且过渡具有 onComplete
事件,即使该对象不再存在于屏幕上,侦听器仍然会被调用。如果对象已被过早移除,其他过渡事件甚至可能会导致程序崩溃。因此,在移除特定对象之前取消其所有过渡是一个好习惯。为此,将对象引用传递给 transition.cancel() 非常有用。
在更广泛的范围内,您可以考虑在退出 Composer 场景或清除模块之前,使用不带参数的 transition.cancel() 来取消**所有**过渡。
Corona 提供了一些便捷函数,让您可以使用易于识别的名称执行简单的过渡。以下函数接受要过渡的对象/组作为第一个参数,并且像标准过渡一样,接受一个包含与过渡类型相对应的键值的 params
表。
函数 | 描述 |
---|---|
transition.blink() | 在指定时间内反复使对象的 alpha 值在显示和隐藏之间切换。 |
transition.dissolve() | 在两个显示对象之间执行溶解过渡。 |
transition.fadeIn() | 在指定时间内将对象的 alpha 值淡入到 1.0。 |
transition.fadeOut() | 在指定时间内将对象的 alpha 值淡出到 0.0。 |
transition.moveBy() | 在指定时间内将对象按指定的 x 和 y 坐标量移动。 |
transition.moveTo() | 在指定时间内将对象移动到指定的 x 和 y 坐标。 |
transition.scaleBy() | 在指定时间内将对象按指定的 xScale 和 yScale 量进行缩放。 |
transition.scaleTo() | 在指定时间内将对象缩放到指定的 xScale 和 yScale 量。 |