0

私はかなり簡単なはずだと確信している何かに固執しています。ライブラリから2本の垂直線を宣言し、渡された線を操作する関数にそれぞれを順番に渡します。コードはエラーなしで実行されますが、おそらく関数ヘッダーで「myLine」という用語が使用されているため、関数が2回目に呼び出されたときに最初の行が上書きされているようです。各行を同じ関数に渡す方法を教えてもらえますが、関数はその行でのみ動作しますか?

コードは次のとおりです。

//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});
}
4

1 に答える 1

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);

また、関数を宣言するとき、および関数を呼び出すときに、適切な大文字小文字の区別があるかどうかを確認してください。

于 2012-11-04T04:41:03.823 に答える