2014-03-05 53 views
0

你好滯後,減少顏色隨機梯度漸變動畫(由程序生成的)

我正在做一些測試,隨機顏色漸變tweenings(使用它們作爲背景)。嘗試不同的事情後,我發現代碼here並稍微將其更改爲下面的代碼,這不幸產生了很多延遲(干擾定時器,因此在同一類中)。我使用GreenSock TweenLite/TweenMax引擎:

package{ 

//... 

    public class Main extends MovieClip{ 

     var color1:uint = Math.floor(Math.random()*0xFFFFFF + 1); 
     var color2:uint = Math.floor(Math.random()*0xFFFFFF + 1); 
     var colors:Object = {left:color1, right:color2}; 
     var newColor1:uint = Math.floor(Math.random()*0xFFFFFF + 1); 
     var newColor2:uint = Math.floor(Math.random()*0xFFFFFF + 1); 
     var newColors:Object = {left:newColor1, right:newColor2}; 
     var mySprite:Sprite = new Sprite(); 

     public function Main() { 
      mySprite.x = 0; 
      mySprite.y = 0; 
      stage.addChildAt(mySprite, 1); 
      drawGradient(); 
      animateBackground(); 

      //... 

     } 

     //... 
     function drawGradient(){ 
      var m:Matrix = new Matrix(); 
      m.createGradientBox(805, 485, 0, 0, 0); 
      mySprite.graphics.beginGradientFill(GradientType.LINEAR, [colors.left, colors.right], [1, 1], [0x00, 0xFF], m, SpreadMethod.REFLECT); 
      mySprite.graphics.drawRoundRect(0,0,805,485, 0); 
      stage.setChildIndex(mySprite, 1); 
     } 
     function animateBackground(){ 
      TweenMax.to(colors, 3, {hexColors:{left:newColor1, right:newColor2}, onUpdate:drawGradient, onComplete:reRandomize}); 
     } 
     function reRandomize(){ 
      color1 = newColor1; 
      color2 = newColor2; 
      newColor1 = Math.floor(Math.random()*0xFFFFFF + 1); 
      newColor2 = Math.floor(Math.random()*0xFFFFFF + 1); 
      animateBackground(); 
     } 

一切工作正常,但滯後不斷增加和增加。爲了讓自己成爲一個想法,swf,以前是36 kB大,只是用這種顏色實現升至74 kB。

我想知道是否有更有效的方法來處理這種效應,或者是代碼中特別滯後的東西。有人知道一種方式嗎?任何幫助將是真棒,非常感謝。

預先感謝您!

注意:我知道這是滯後的原因,經過多次測試後,不同的東西都被禁用了,所以過度的延遲不太可能來自其他來源。

回答

0

您忘記清除mySprite中的舊圖形,因此任何額外的命令都會在該精靈圖層上生成圖層。應該在繪製另一個漸變之前添加mySprite.graphics.clear()調用drawGradient函數。

function drawGradient(){ 
     var m:Matrix = new Matrix(); 
     m.createGradientBox(805, 485, 0, 0, 0); 
     mySprite.graphics.clear(); // here 
     mySprite.graphics.beginGradientFill(GradientType.LINEAR, [colors.left, colors.right], [1, 1], [0x00, 0xFF], m, SpreadMethod.REFLECT); 
     mySprite.graphics.drawRoundRect(0,0,805,485, 0); 
     stage.setChildIndex(mySprite, 1); 
    } 
+0

謝謝!我不知道我沒有意識到。現在滯後明顯變小。無論如何,有沒有一種滯後的方式來做這種補間?現在工作正常,但我想知道是否有其他更有效的方法來處理它。再次感謝你! – Haekoth

+0

沒關係,發現滯後的問題,不是這個。謝謝你的幫助! – Haekoth