2011-10-27 31 views
1

我想知道爲什麼AS3的ColorTransform只變換形狀的邊界?ActionScript 3的色彩變換改變邊境只有

Similar question張貼然而,我不認爲如此大規模的解決辦法需要在爲了做到這一點做。

我有類似:

var sh:Shape = new Shape(); 
sh.graphics.lineStyle(4, 0x000000); 
sh.graphics.beginFill(0xFFFF00); 
sh.graphics.drawRect(0, 0, 200, 200); 
sh.graphics.endFill(); 
addChild(sh); 

爺,我知道我們可以用with(sh.graphics) do這裏,但是如果我做一個色彩變換,如:

sh.transform.colorTransform = new ColorTransform(1, 1, 1, 1, red_offset, green_ofs, b_off, 0); 

只有形狀的邊界轉化。 我試圖在每一幀上重新繪製不同填充的對象,但它在性能上是一種矯枉過正,大約10個3d平面是性能殺手。

我只能想到的,因爲beginFill()不使用筆由lineStyle()集,並且可能會造成問題,但是我真的想了解的問題,因爲我需要我的超級超semi3d微調自旋同時改變顏色而不是他的邊界! :)

提前感謝!

回答

1

我不知道爲什麼的ColorTransform隻影響線顏色(似乎只是設計決定),但ColorMatrixFilter將改變整個形狀(測試)。不要害怕它 - 這很簡單。矩陣的前四列是乘數(1.0是100%),第五列是結果。

 var sht:Shape = new Shape(); 
     sht.graphics.lineStyle(4, 0x7F7FFF); 
     sht.graphics.beginFill(0xFFFFFF); 
     sht.graphics.drawRect(0, 0, 200, 200); 
     sht.graphics.endFill(); 
     sht.x = 300; 
     sht.y = 100; 
     sht.filters = [ new ColorMatrixFilter(
      [ 0.5, 0.0, 0.0, 0.0, 0.0, 
       0.0, 1.0, 0.0, 0.0, 0.0, 
       0.0, 0.0, 0.7, 0.0, 0.0, 
       0.0, 0.0, 0.0, 1.0, 0.0 
      ])]; 
     addChild(sht); 
+0

非常感謝您!會盡快嘗試。順便說一下,如果ColorMatrixFilter提供更多的功能,ColorTransform的意義何在? –

+1

的ColorTransform更簡單,應該快 - 這是一個矢量乘法或四個標量的,和的ColorMatrixFilter爲四個向量MULS和一個加法。 – alxx