2009-04-28 73 views
7

我想問一下,怎麼只改變填補實例的色彩在舞臺上 - 我可以通過使用ColorTransform對象做到這一點,但它改變了整個實例的顏色,不只是填充。我只想改變填充顏色,而不是筆觸顏色。有誰能夠幫助我?改變填充顏色的MovieClip的ActionScript 3

這是我的代碼:

function paint(){ 
    var myColorTransform:ColorTransform = new ColorTransform(); 

    myColorTransform.color = someColorNumber; 

    coloredObject.transform.colorTransform = myColorTransform; 

} 

回答

5

一旦你繪製的形狀的動作腳本無法確定什麼是中風的方式,什麼是填充這不能完成。

您有幾個選項。

獨立個夠一舉進入單獨的影片剪輯並設置顏色轉換隻適用於填充。

如果它是一個簡單的形狀,畫它使用圖形對象,您可以指定填充顏色和筆觸顏色。

可能引擎蓋是我的首選方法,因爲形狀可能非常複雜,並且將它留在引擎中可以更好地控制設計師能夠更改它而不是開發人員。這雖然稍微複雜一點,但稍微複雜一點。

+1

是的,我已經找到了第一個解決方案,thanx;) – Dungeo 2009-04-28 08:23:11

2

如果你的目標是FP10,並且你想要一個像ColorTransform一樣簡單的過濾器,你可以編寫一個PixelBlender內核來獲取2個參數的顏色(一個用於源,一個用於目的地),匹配像素源顏色,並交換它們的目的地;是這樣的:

//I release this under the MIT License. Use it to your heart's content. 

<languageVersion : 1.0;> 

kernel ReplaceColor 
< namespace : "PIPEEP"; 
    vendor : "PiPeep"; 
    version : 1; 
    description : "Replace color"; 
> 
{ 
    input image4 src; 
    output pixel4 dst; 

    parameter pixel4 sColor 
    < 
     minValue:pixel4(0.); 
     maxValue:pixel4(255.); 
    >; 
    parameter pixel4 dColor; 
    parameter float tolerance; 

    void 
    evaluatePixel() 
    { 
     dst = sampleNearest(src,outCoord()); 
     pixel4 sColorAdjusted = abs((sColor/pixel4(255.)) - dst); 
     if(sColorAdjusted.r < tolerance && sColorAdjusted.g < tolerance && sColorAdjusted.b < tolerance && sColorAdjusted.a < tolerance) { 
      dst = dColor; 
     } 
    } 
} 

記得自己爲何討厭PixelBlender IDE

編輯:請記住,這不會與抗鋸齒髮揮出色,但如果你正在使用stage.quality =「低「,這並不重要。

要添加使用它在AS3,試試這個(從http://scriptplayground.com/tutorials/as/Flash-CS4-and-Pixel-Bender-Overview/被盜,所以你需要改變幾行代碼):

代碼的第一部分是定義一些變量使用稍後的。只有兩個 可能看起來是新的Shader和 ShaderFilter。這些都是新的到Flash Player 10和這些類 負責處理像素 本德爾過濾器的數據。

var loader:URLLoader; 
var shader:Shader; 
var shaderFilter:ShaderFilter; 
var image:MovieClip; 
var timer:Timer; 
var timerInt:uint = 40; 

在代碼中的下一個步驟是加載 圖像的階段,您在前面的步驟中加入 。要創建

image = new SampleImage(); image.y = 
20; image.x = 25; 

addChild(image); 

前兩種方法用於加載PBJ文件和 初始化濾鏡創建 過程

function startEffect() { loader = new 
URLLoader(); loader.dataFormat = 
URLLoaderDataFormat.BINARY; 
    loader.addEventListener(Event.COMPLETE, 
loadComplete); loader.load(new 
URLRequest("sample.pbj")); } 



function loadComplete(e:Event):void { 
    shader = new Shader(loader.data); 
    initFilter(); } 

下一個函數initFilter()被 調用一次的PBJ文件是 成功加載,所以過濾器可以創建 。此濾鏡設置圖像的r,g, b顏色值,其中 實際上是從 圖像中吹去的細節。該「shader.data.red.value」爲 例如會引用寫在 開始,如果你發現代碼中有一個 「參數飄紅」,這是一個 浮點變量設置 紅色的水平像素 彎管機代碼。在這種情況下,值爲 設爲20.此過程對其他2種顏色重複 ,然後將 傳遞給圖像實例。

這個函數的最後部分設置 將運行到應用此 過濾器,直至圖像恢復到其 正常外觀

function initFilter() { 
    shader.data.red.value = [20]; 
    shader.data.green.value = [20]; 
    shader.data.blue.value = [20]; 
    shaderFilter = new 
ShaderFilter(shader);  image.filters = 
[shaderFilter]; 



    timer = new Timer(timerInt, 0); 
    timer.addEventListener(TimerEvent.TIMER, 
timerHit); timer.start(); } 

最終的功能重複應用濾鏡的過程 計時器,但是第一個 獲取當前過濾器值,並且 從每個 合格的值中減去0.1。該過程緩慢地從圖像中移除濾光片強度,直到 它完全消失。這個函數被, 函數調用,該函數在initFilter(), 函數中創建了 。

function timerHit(e:TimerEvent):void 
{ 
    if(shader.data.red.value == 1) 
    { 
     timer.stop(); 
     return; 
    } 

    var r:uint = shader.data.red.value - 0.1; 
    var g:uint = shader.data.green.value - 0.1; 
    var b:uint = shader.data.blue.value - 0.1; 

    shader.data.red.value =  [r]; 
    shader.data.green.value = [g]; 
    shader.data.blue.value = [b]; 
    shaderFilter = new ShaderFilter(shader); 
    image.filters = [shaderFilter]; 
} 

代碼的最後一步是開始 的過程,在這個應用程序 是通過調用startEffect() 功能完成的,所以這就是我們將做

startEffect();

抱歉讓你的眼睛流血!我認爲那是我最長的答案!

5

我知道這是比較晚的遊戲,但我遇到了同樣的問題,並修正了它有點不同。它可能沒有任何幫助,因爲它只能在有限的情況下工作*,但我開始時我的形狀被填充爲白色&撫摸着黑色。這樣,您可以使用RGB倍增器應用顏色轉換,將白色淡化爲您所需的顏色,並保持黑色邊框完整。因此,爲了使你的對象紅(黑邊)用途:

function paint() { 
    shape.transform.colorTransform = new ColorTransform(1, 0, 0); 
} 

或者堆棧溢出橙(仍與黑色邊框):

function paint() { 
    shape.transform.colorTransform = new ColorTransform(0.996, 0.478, 0.082); 
} 

*如果你只是想它只會工作帶黑色邊框的單色。