重复调用函数而不覆盖传递的对象

时间:2012-11-03 19:02:33

标签: actionscript-3

我坚持使用我确信应该相当简单的东西。我从库中声明了两条垂直线,然后依次将它们传递给一个在传递的线上运行的函数。代码执行时没有错误,但显然是在第二次调用函数时覆盖第一行,可能是因为在函数头中使用了术语“myLine”。任何人都可以告诉我如何将每一行传递给同一个函数,但该函数只在该行上运行吗?

代码是:

//declare new lines from library
var myLine1:letterLine = new letterLine();
var myLine2:letterLine = new letterLine();

//call function and pass each line in turn
VerticalLine(myLine1, lineX = stage.stageWidth/2 - lineOffset, lineY, lineLength, lineThickness, lineColour, lineTweenSpeed);
VerticalLine(myLine2, lineX = stage.stageWidth/2 - lineOffset, lineY, lineLength, lineThickness, lineColour, lineTweenSpeed);

//operate on the line passed to the function
function verticalLine(myLine, lineX:int, lineY:int, lineLength:Number, lineThickness:int, lineColour, lineTweenSpeed:Number):void {
    //draw line
    myLine.height = 0;
    myLine.x = lineX;
    myLine.y = lineY;
    myLine.width = lineThickness;

    var myColour:ColorTransform = myLine.transform.colorTransform;
    myColour.color = lineColour;
    myLine.transform.colorTransform = myColour;
    addChild(myLine);

    //set mask properties for line
    var maskW:uint = lineThickness;
    var maskH:uint = lineLength;

    //set gradient properties for mask
    var gradientFillType:String = GradientType.LINEAR;
    var gradientColours:Array = [0x123456, 0x654321, 0x123456, 0x654321];
    var gradientAlphas:Array = [0.4, 1, 1, 0.4];
    var gradientRatios:Array = [0, 100, 155, 255];
    var gradientMatrix:Matrix = new Matrix;

    var maskRotation:Number = Math.PI/2;
    var maskX:int = lineX;
    var maskY:int = myLine.y - lineLength/2;;
    gradientMatrix.createGradientBox(maskW, maskH, maskRotation, maskX, maskY);
    var spreadMethod:String = SpreadMethod.PAD;

    myLine.cacheAsBitmap = true;

    //draw mask shape
    var myMask = new Shape ;
    myMask.graphics.beginGradientFill(gradientFillType, gradientColours, gradientAlphas, gradientRatios, gradientMatrix, spreadMethod);
    myMask.graphics.drawRect(maskX, maskY, maskW, maskH);
    myMask.cacheAsBitmap = true;
    addChild(myMask);

    //mask line
    myLine.mask = myMask;

    TweenLite.to(myLine, lineTweenSpeed,{height:lineLength, ease:Linear.easeIn});
}

1 个答案:

答案 0 :(得分:0)

诀窍是,您为两条线发送相等的值,因此它们严格重叠,您将其视为覆盖。调用函数时,需要为相应的行提供实际值。像这样:

verticalLine(myLine1, stage.stageWidth/2 - 100, 10, 125, 1, 0xff0000, 0.2);
verticalLine(myLine2, stage.stageWidth/2 - 2, 300, 40, 2, 0x0000ff, 0.3);

在声明功能和调用时,还要检查是否有合适的外壳。