Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 有没有更好的方法来连接电晕Lua中的转换?_Animation_Lua_Coronasdk - Fatal编程技术网

Animation 有没有更好的方法来连接电晕Lua中的转换?

Animation 有没有更好的方法来连接电晕Lua中的转换?,animation,lua,coronasdk,Animation,Lua,Coronasdk,我目前正在制作一个垃圾桶的动画,当有东西被拖到垃圾桶上时,使用以下代码: 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, xSc

我目前正在制作一个垃圾桶的动画,当有东西被拖到垃圾桶上时,使用以下代码:

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()

代码运行得很好,但我忍不住觉得可以编写得更好。有两个函数可以设置对象的动画


有什么方法可以更有效地执行此操作吗?

您可以通过设置带延迟的第二次转换,在单个函数中执行此操作;请参阅此代码示例:


但是,根据您的情况,这并不一定不那么复杂,因为现在您必须同时跟踪两个过渡,而不是一次只跟踪一个过渡。在您发布的代码中,您没有跟踪转换,但您可能应该在过渡完成之前取消它们(例如,玩家在过渡中间切换场景)。
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
这将不再有效,但它确实将所有与垃圾桶动画有关的事情都放在一个地方。不过,我认为这种方法可能会很快失去控制,尤其是在制作垃圾桶动画时,如果您正在执行除转换以外的任何操作,例如更新程序状态,或创建/销毁其他对象等


与霍金的答案相呼应,这种方法也不支持取消。

这个问题已经很老了,但因为我也在尝试做同样的事情,我想我应该分享我的想法。这将顺序执行作为变量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})
对于以下目的也非常有用:

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

…etc

具体来说,这段代码的低效之处是什么?我认为问题在于丑陋而不是低效。是的。我想这不是效率问题,更重要的是我必须创建并调用两个函数来做一些非常基本的事情。我想知道是否有更整洁的方法。使用适当的放松功能。请看下面的答案谢谢。我想我仍然需要使用两个函数tho?也许我并没有想象的那么远…谢谢,是的,我试过了,但我似乎无法让它工作。现在我要研究“跟踪过渡”!
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