2014-04-16 20 views

回答

3

目前,這些沒有什麼區別。

使用StateModifier如果你需要setTransformsetSizesetOriginsetOpacity。 目前修改器仍然支持這些方法,但它們是已棄用

StateModifier使用可轉換,其可以被用於將值之間平滑過渡。只要使用這些方法時提供一個過渡:

stateModifier.setTransform(Transform.rotateZ(Math.random()*Math.PI/2), { curve: 'easeOut', duration: 5000 }); 

修改較爲有限,並且使用transformFromsizeFromoriginFromopacityFrom。這些方法可以接受一個值,getter函數或帶有get函數的對象。

+2

那麼爲什麼任何人都會使用'Modifier'呢? –

+2

當您想要基於(連續)功能而不是事件進行修改時。示例:使用StateModifier在按鍵上更改大小,但使用「修改器」根據鼠標位置更改顏色。這將更新Famous與引擎(60 FPS)關聯起來,而不是DOM事件,這可以提高性能(如果事件確實是連續的) – markmarijnissen

+1

我剛剛也瞭解到這一點。命名非常混亂。他們應該爲兩者使用一個單獨的類「Modifier」,並有一個獨立的函數,比如'bindTransform()'或類似的東西... –

2

狀態有一個在他們的建設者的選擇的一個重要區別。 StateModifier只接受常量值作爲初始值。修飾符接受具有適當返回值的常量值和函數。該功能將以60fps的速度播放。

1)StateModifier

var stateModifier = new StateModifier({ 
    size: [200, 200], 
    opacity: 1, 
    transform: [1, 0.5, 0, 0, -0.5, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 
    //transform: Transform.translate(20, 20, 0), // --> this is still constant 
}); 

2)修改

var transitionable = new Transitionable(0); 
transitionable.set(2*3.14, {duration: 2000}); 

var modifier = new Modifier({ 
    origin: [0.5, 0.5], 
    transform: function(){ 
     var state = transitionable.get(); 
     transition = Transform.rotateZ(state); 
     return transition; // --> this will cause rotating 
    }, 
    opacity: function(){ 
     return Math.random(); // --> this will cause blinking (60fps) 
    }, 
}); 
2

性能和設計方面的考慮在你選擇的任何。

當對象具有靜態定位或不經常更改其變形細節時,您可以使用修改器。例如,如果您有一組相對於父對象坐的對象,並且您只需要設置其位置一次。你使用了一個Modifier,因爲一旦你放下了它們,就不用擔心觸摸他們所關心的渲染樹。

當您需要更頻繁地控制對象轉換時,您可以使用StateModifier。這是當你想要動畫或控制每一幀的變換,或者每當事件發生時。

StateModifier使用任一方法。這給你兩種方法來改變/動畫化對象變換。 意味着您正在提供一個函數並使用某個對象來確定對象的值(如使用.get()方法的Transitionable或您自己的對象)。如果你有一個總是追蹤別的東西的遊戲對象,這可能很有用,你可以使用一個函數,它會在每一幀都要求對象變換值。 推送表示您決定何時更改內容,並使用StateModifier.setOpacity.setTransform方法。這樣可以更好地適應在某些事件觸發前保持靜止的UI對象。每當您調用這些方法時您還可以使用不同的緩動曲線,或者只需立即進行更改。

性能和設計考慮因素來自這樣一個事實,即您應該總是嘗試編寫一個應用程序,該應用程序不必超出需要的範圍。如果所有對象都使用StateModifier*拉模型(使用稱爲每幀的函數),那麼可以想象,如果偶爾需要更改對象並且使用了方法在需要時更改對象狀態。這對於一個小型用戶界面來說可能不是問題,但是如果您將應用擴展到控制數百甚至數千個對象,則可以看到開始耗費更多CPU資源的位置。

在總結

所以,改性劑只是放置東西的地方,並忘掉它,那裏的StateModifier是能夠移動的東西更好的是偉大的,但你必須與不斷被詢問它在做什麼選擇()或告訴它,當你準備好()。