2012-11-03 3 views
0

Я застрял с чем-то, что, я уверен, должно быть довольно простым. Я объявляю две вертикальные строки из библиотеки, а затем передаю каждую по очереди функцию, которая работает на переданной ей строке. Код выполняется без ошибок, но, по-видимому, переписывает первую строку, когда функция вызывается во второй раз, по-видимому, из-за использования термина «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}); 
} 
+4

Опубликовать функцию body. Я сильно сомневаюсь, что вы думаете, что происходит на самом деле. –

+2

Я ничего не вижу в этом коде, что могло бы вызывать то, что вы говорите. Мысли: вы передаете одинаковые значения оба раза, так что обе строки будут идентичными (или это было просто для иллюстрации вызова его дважды в сообщении?) –

+0

Привет, Джейсон. Нет, не просто иллюстрация - мне нужно дважды вызвать эту функцию и заставить ее работать с двумя отдельными объектами myline. Мысль о моей собственной: имеет ли значение, если функция вызывается *, когда она в настоящее время работает при более раннем вызове? * Другими словами, отключает ли Flash выполнение (и отбрасывание) первого вызова и начало заново или делает это в смысл, создать столько функций, сколько есть вызовов к этой функции, чтобы выполнять вызовы функций независимо. Имеет ли это смысл?! –

ответ

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

Также проверьте, есть ли у вас надлежащий корпус при объявлении функции и при ее вызове.

+0

Привет, Джейсон. Две строки кода, которые вы цитировали, не идентичны. Они передают другой объект функции - myLine1 и myLine2 - даже если параметры для каждой myLine, которые также передаются функции, одинаковы. –

+1

Здравствуйте, Vesper, извините, что вы неправильно пометили вас ранее. Оказывается, вы правы. В то время как отдельный объект передается функции, позиция myLine1 идентична позиции myLine2, поэтому появляется только одна myLine! Мальчик, я чувствую себя глупо. Большое спасибо всем, кто прилагал усилия, чтобы помочь мне, - высоко оценил. –

Смежные вопросы