2013-08-01 38 views
0

我嘗試製作一個正方形網格,在那裏我可以單獨控制每個正方形的顏色參數,即。讓他們一個接一個或全部同時閃光。Sprites上的多種顏色補間

我試圖用補間來做,用for循環運行參數。

下面的代碼嘗試同時閃爍所有方塊,每秒一次。但由於某些原因,所有的方格都不會補間,只有一些方法。或者他們部分吐溫,有時他們根本不吐溫。但是,這種模式不會重演。

這是太多的補間在同一時間? for循環的正確方法是做到這一點?我應該使用MovieClip而不是Sprites嗎?如果我想在很快的階段控制許多不同物體的顏色,那麼最好的方法是什麼?

import fl.transitions.Tween; 
import fl.transitions.easing.*; 
import fl.transitions.TweenEvent; 
import flash.display.*; 
import flash.events.*; 
import flash.display.Sprite; 
import flash.geom.Rectangle; 
import flash.geom.ColorTransform; 
import Math; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 
import resolumeCom.*; 
import resolumeCom.parameters.*; 
import resolumeCom.events.*; 

    public class LightGrid extends MovieClip 
    { 
     private var t1:Tween; 
     private var resolume:Resolume = new Resolume(); 
     private var tempo:FloatParameter = resolume.addFloatParameter("Tempo", 0.6); 
     private var pad = 3; 
     private var dim = 20; 
     private var posX = 0 + pad; 
     private var posY = 0 + pad; 
     private var a:Number = new Number(); 
     private var b:Number = new Number(); 
     private var blk:Number = new Number(); 
     var newCol:ColorTransform = new ColorTransform(); 

     public function LightGrid() 
     { 
      resolume.addParameterListener(parameterChanged); 

      for (var b = 0; b < 16; b++) 
      { 
       posY = (b*dim) + (b*pad) + pad; 
       trace("New row"); 
       for (var a = 0; a < 24; a++) 
       { 
        posX = (a*dim) + (a*pad) + pad; 

        // l = line, f = fill 

        var l:Sprite = new Sprite; 

        l.graphics.lineStyle(2, 0xFFFFF, 1); 
        l.graphics.drawRect(posX, posY, dim, dim); 
        l.name = "line_Row" + b + "Col" + a; 

        addChild(l); 

        var f:Sprite = new Sprite; 
        f.graphics.beginFill(0x990000, 1); 
        f.graphics.drawRect(posX, posY, dim, dim); 
        f.graphics.endFill(); 
        f.name = "fill_Row" + b + "Col" + a; 

        addChild(f); 

        trace(getChildByName("fill_Row" + b + "Col" + a).name); 
       } 
      } 

      var myTimer:Timer = new Timer(1000, 100); 
      myTimer.addEventListener("timer", timerHandler); 
      myTimer.start(); 
     } 

     public function timerHandler(event:TimerEvent):void { 
      flashTheLights(); 
     } 

     public function parameterChanged(e:ChangeEvent):void 
     { 
      if (e.object == tempo) 
      { 
      } 
     } 

     public function flashTheLights():void 
     { 

     blk = 0; 

      for (var blk = 0; blk < (24/3); blk++) 
      { 
       for (var d = 0; d < 16; d++) 
       { 
        for (var c = (0+(3*blk)); c < (3+(3*blk)); c++) 
        { 
         newCol.redOffset=30-(35*blk); 
         newCol.blueOffset=200+(7*blk); 
         newCol.greenOffset=200; 

         trace(getChildByName("fill_Row" + d + "Col" + c).name); 
         var fill:Sprite = getChildByName("fill_Row" + d + "Col" + c) as Sprite; 

         fill.transform.colorTransform.alphaMultiplier = -255; 
         fill.transform.colorTransform = newCol; 
         trace("Run tween"); 

         var myTween = new Tween(fill,'alpha',Regular.easeIn,1,0,0.3,true); 
        } 
       } 

      trace("Done!" + blk); 

      } 
     } 
    } 
+1

你看過嘗試不同的補間解決方案嗎? Greensock是第一個想到的,或者你可以爲自己編寫一個簡單的程序。 – Glitcher

+0

Gee,一個100圈的循環,每次創建128個補間 - 確定它太大了。 – Vesper

+0

是的,我認爲這可能太多了...但是必須有某種方式來做到這一點?我的意思是我應該嘗試尋找其他解決方案嗎? –

回答

0

我有點通過堆疊下的movieclip精靈所以解決了這個問題僅補間耦合元件代替數十或數百

for (var k = 0; k < (grdX/ptrnSz); k++) 
     { 

      var ptrn:MovieClip = new MovieClip(); 
      ptrn.name = "ptrn" + k; 
      addChild(ptrn); 
      ptrn.alpha = 0.01; 
      ptrnAm++; 

      for (var d = 0; d < grdY; d++) 
      { 

       posY = (d*dim) + (d*pad) + top; 

       for (var c = (0+(ptrnSz*k)); c < (ptrnSz+(ptrnSz*k)); c++) 
       { 

        posX = (c*dim) + (c*pad) + left; 

        // l = line, f = fill 

        var f:Sprite = new Sprite; 
        f.graphics.beginFill(0xFFFFFF, 1); 
        f.graphics.drawRect(posX-0.5, posY, dim, dim); 
        f.graphics.endFill(); 
        f.name = "fill_Block" + k + "Row" + d + "Col" + c; 
        ptrn.addChild(f); 

       } 

      } 

     } 

grdX =網格尺寸在X軸(多少列)
ptrnSz =包含精靈的影片剪輯的大小(多少列)
之後,我只是將影片剪輯與TweenMax補間,每個都用getChildByName調用它們。