2011-09-24 69 views
3

我目前動畫垃圾桶當某樣東西拖放到其與此代碼:有沒有更好的方式來連接Corona Lua中的轉換?

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

我認爲這個問題是關於醜而不是無效。 – jamesh

+0

是的。我想這不是效率,更重要的是我不得不創建並調用兩個函數來做一些非常基本的事情。我想知道是否有更整潔的做法。 – antikewl

回答

1

那麼你可以通過設置第二個轉換延遲來完成單個功能;請參閱此代碼示例:http://developer.anscamobile.com/reference/index/transitionto

然而,根據您的情況,這並不一定簡單,因爲現在您必須同時跟蹤兩個轉換,而不是一次只轉換一個轉換。在你發佈的代碼中,你沒有記錄轉換,但是如果你需要在轉換完成之前取消它們(例如,播放器在轉換過程中切換場景),可能應該是這樣。

+0

謝謝,是的,我確實嘗試過,但我似乎無法得到它的工作。現在我將不得不研究「跟蹤轉型」! – antikewl

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的回答,這種方法不支持取消。

+0

謝謝。我想我仍然需要使用兩個功能壽?也許我沒有想象中那麼遙遠...... – antikewl

0

這個問題很老了,但是因爲我試圖做同樣的事情,所以我想我應該分享我想出來的東西。這將順序執行作爲變量參數傳入的轉換。如果提供了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}) 
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 

...等

相關問題