我正在使用此代码将某些内容拖放到其上时为垃圾桶制作动画:
local trashUp
local trashDown
trashUp = function()
transition.to(
trash, {time=100, xScale=1.2, yScale=1.2, onComplete=trashDown })
end
trashDown = function()
transition.to(
trash, {time=100, xScale=1, yScale=1})
end
然后在我想要启动动画时调用trashUp()。
代码工作正常,但我不禁觉得它可以更好地编码。两个动画对象动画的功能!
有什么方法可以更有效地做到这一点吗?
答案 0 :(得分:1)
你可以通过设置延迟的第二次转换在单个函数中完成它;请参阅此代码示例:http://developer.anscamobile.com/reference/index/transitionto
根据您的情况,这不一定不那么复杂,因为现在您必须同时跟踪两个转换,而不是一次只跟踪一个转换。在您发布的代码中,您没有跟踪转换,但您可能应该在转换完成之前需要取消它们(例如,播放器在转换过程中切换场景)。
答案 1 :(得分:1)
您可以通过将onComplete
函数与第一次转换调用内联编码来实现:
animateTrash = function()
transition.to(
trash,
{ time=100, xScale=1.2, yScale=1.2, onComplete=
function()
transition.to(
trash,
{time=100, xScale=1, yScale=1})
end
})
end
这将不再是 高效 ,但它确实与在一个地方设置垃圾桶动画有关。我认为这种方法很快就会失控,特别是如果您在动画垃圾桶时进行除转换以外的任何操作,例如更新程序的状态,或创建/销毁其他对象等等。
回应jhocking的回答,这种方法也不支持取消。
答案 2 :(得分:0)
这个问题很老了,但是因为我试图做同样的事情,我想我应该分享我想出的东西。这顺序执行作为变量args传入的转换。如果提供了onComplete,则在其转换完成时调用它。
local function transitionSequence(target, step, ...)
local remaining_steps = {...}
if #remaining_steps > 0 then
local originalOnComplete = step.onComplete
step.onComplete = function(target)
if originalOnComplete then
originalOnComplete(target)
end
transitionSequence(target, unpack(remaining_steps))
end
transition.to(target, step)
else
transition.to(target, step)
end
end
示例:
transitionSequence(myImage,
{xScale=0.5, onComplete=function(t) print("squeeze") end},
{xScale=1, onComplete=function(t) print("relax") end},
{yScale=2, onComplete=function(t) print("stretch") end},
{yScale=1, onComplete=function(t) print("relax again") end})
答案 3 :(得分:0)
transition.to( trash, {time=t, delta=true, xScale=1.5, transition=easing.continousLoop} )
对于这样的目的也非常有用:
easing.sin = function( f, a )
return function(t, tmax, start, d)
return start + delta + a*math.sin( (t/tmax) *f * math.pi*2 )
end
end
easing.sinDampened = function( f, a, damp )
return function(t, tmax, start, d)
return start + delta + a*math.sin( damp^(t/tmax) *f * math.pi*2 )
end
end
...等