отображать строки в AS3 - PullRequest
       84

отображать строки в AS3

1 голос
/ 22 сентября 2011

Я озадачен этой функцией, которая до этого вызывается с параметрами 22 и 58 для xVal и yVal соответственно. Он не отображает ничего, когда SWF компилируется и тестируется, и это без ошибок. Код находится в классе документа:

    private function mLine(xVal : int, yVal : int) {
        var rCol = 0x0000FF;
        var incr = Math.round((Math.random() * 20) + 8);
        lns.push(new Shape());
        var i = lns.length - 1;

        this.addChild(lns[i]);
        lns[i].graphics.moveTo(xVal, yVal);
        lns[i].graphics.lineStyle(10, rCol);
        lns[i].graphics.lineTo(xVal, yVal + 20);
        lns[i].name = incr;
        trace("lns[" + i + "] x is " + lns[i].x); // outputs 'lns[0] x is 0'
        trace("xVal is " + xVal); // outputs 'xVal is 22'
        trace("yVal is " + yVal); //outputs 'yVal is 58'
        trace(stage.contains(lns[i])); // outputs 'true'
    }

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Предполагая, что вы где-то объявили private var lns = [];, он рисует синюю линию (20 пикселей вниз от заданной позиции).

Ничего не отображается

Это означает, что у вас, вероятно, нет объекта этого класса на сцене.В вашем классе документов вы должны использовать addChild для отображения экземпляра класса, содержащего mLine.млин должен называться как-то очевидно.Вы можете сделать это в конструкторе класса, но вам нужно будет удалить последний оператор трассировки, чтобы избежать ошибки нулевого указателя, потому что stage будет null тогда.

Редактировать: пропущеносказал, что это в классе документа.Итак, попробуйте и посмотрите, работает ли рисование чего-либо еще.Кажется, проблема не в этой функции.

0 голосов
/ 22 сентября 2011

Ваш код, похоже, должен работать. Я переписал его, чтобы лучше соответствовать рекомендациям ActionScript 3

private function drawLine(xVal:int, yVal:int):void 
{
    var lineColor:uint = 0x0000FF;

    var lineShape:Shape = new Shape();
    //lineShape.name = String(Math.round((Math.random() * 20) + 8));
    lineShape.graphics.lineStyle(10, lineColor);
    lineShape.graphics.moveTo(xVal, yVal);
    lineShape.graphics.lineTo(xVal, yVal + 20);
    addChild(lineShape);
    lines.push(lineShape);
}

Свойства x и y вашей фигуры будут равны нулю, потому что вы никогда не устанавливаете их. вы просто рисуете линии внутри фигуры в xVal и yVal. Вы можете сделать то же самое, как это:

private function mLine(xVal:int, yVal:int) 
{
    var lineColor:uint = 0x0000FF;

    var lineShape:Shape = new Shape();
    //lineShape.name = String(Math.round((Math.random() * 20) + 8));
    lineShape.graphics.lineStyle(10, lineColor);
    lineShape.graphics.moveTo(0, 0);
    lineShape.graphics.lineTo(0, 20);
    lineShape.x = xVal;
    lineShape.y = yVal;
    addChild(lineShape);
    lines.push(lineShape);
}

Не уверен, почему он вообще не появляется у вас.

...