2011-02-15 37 views
0

向所有人致以問候。AS3:新手,addChild問題

我很新的AS3(和Flash CS4),我有一個問題。我有這個項目,用戶在一個區域上用鼠標動態繪製她的簽名,然後在另一個框架上繪製簽名後,他可以通過點擊一些按鈕來改變簽名的顏色,每個按鈕都有不同的顏色。

我用這個來捕捉簽名另一架:

  1. 觸發捕捉事件的按鈕:

    //targetMC is an MC to where the signature will be copied 
    
    function buttonClick(event:MouseEvent):void{ 
        capture(drawingBoard_mc, _targetMC); 
        drawGraphics.clear(); 
        gotoAndStop(5); 
    }; 
    
  2. 功能

    function capture(target:DisplayObject, _target:MovieClip):void { 
        var relative:DisplayObject = target.parent; 
        var rect:Rectangle = target.getBounds(relative); 
        var bitmapData:BitmapData = new BitmapData(rect.width + PIXEL_BUFFER * 2, rect.height + PIXEL_BUFFER * 2); 
        bitmapData.draw(relative, new Matrix(1, 0, 0, 1, -rect.x + PIXEL_BUFFER, -rect.y + PIXEL_BUFFER)); 
    
        var byteArray:ByteArray; 
        var jpgEncoder:JPGEncoder = new JPGEncoder(JPG_QUALITY_DEFAULT); 
        byteArray = jpgEncoder.encode(bitmapData); 
        var ldr:Loader = new Loader(); 
        ldr.name = "signature"; 
        ldr.loadBytes(byteArray); 
        //target is target mc where the signature will be copied into 
        _target.addChild(ldr as DisplayObject); 
    } 
    

它複製si技術完美。

的問題是目標5在那裏我有2個按鈕來改變顏色:

//Color 1 
line_bt1.buttonMode = true; 
line_bt1.mouseChildren = false; 
line_bt1.addEventListener(MouseEvent.MOUSE_DOWN, line_bt1Over); 

//Color 2 
line_bt2.buttonMode = true; 
line_bt2.mouseChildren = false; 
line_bt2.addEventListener(MouseEvent.MOUSE_DOWN, line_bt2Over); 

function line_bt1Over(e:Event){ 
    var myMC:DisplayObject = DisplayObject(_targetMC.getChildByName("signature") as DisplayObject); 
    changeColor(myMC, 0xCCCCCC); 
    changeColor(myMC, 0xCCCCCC); 
} 

function line_bt2Over(e:Event){ 
    var myMC:DisplayObject = DisplayObject(_targetMC.getChildByName("signature") as DisplayObject); 
    changeColor(myMC, 0x000000); 
    changeColor(myMC, 0x000000); 
} 

function changeColor(object:DisplayObject, color:Number){ 
    var colorchange:ColorTransform = new ColorTransform(); 
    colorchange.color = color; 
    object.transform.colorTransform = colorchange; 
} 

我的問題是_targetMC和簽名的孩子都在改變顏色,我只是希望孩子/簽名。 :(

我使用var myMC:DisplayObject = DisplayObject(_targetMC.getChildByName("signature") as DisplayObject);訪問簽名的孩子,但容器MC(_targetMC)也改變顏色......我什麼,我提前做錯了嗎?

感謝。

回答

0
  1. 一個調用changeColor每個要足夠

  2. 可以重新使用對象自己的colorTransform

    function changeColor(object:DisplayObject, color:Number){ 
        var colorchange:ColorTransform = object.transform.colorTransform; 
        colorchange.color = color; 
        object.transform.colorTransform = colorchange; 
    } 
    
  3. 可以省略所有類型強制轉換爲DisplayObject - 對所有的精靈和影片剪輯和裝載機的DisplayObject的子類,所以他們應該工作正常,任何需要的DisplayObject:

    var myMC:DisplayObject = _targetMC.getChildByName("signature"); 
    // getChildByName always returns a DisplayObject 
    

    var ldr:Loader = new Loader(); 
    ldr.name = "signature"; 
    ldr.loadBytes(byteArray); 
    _target.addChild(ldr); // Loader extends DisplayObject 
    
  4. 您的colorChange函數應該按預期工作。一定還有其他的錯誤。我不能完全肯定,但我猜你的問題或者是涉及到所有目標(_mc)的查詢股價對象:

    • 參數「目標」的功能,「捕獲」
    • 參數「_target 「功能‘捕捉’
    • 成員變量‘_targetMC’

    或者,它可能涉及到添加一個名爲新的Loader‘每次調用capture()時間簽名’相同的_targetMC,但從來沒有拆除舊一:第二次點擊後,將有多個剪輯與nam e「簽名」,這可能會導致問題。