在AS3中显示行

时间:2011-09-22 08:41:43

标签: actionscript-3 graphics shape stage document-class

我对这个函数感到困惑,在此之前调用xVal ad yVal的参数22和58。编译和测试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 个答案:

答案 0 :(得分:1)

假设您已在某处声明private var lns = [];,则会绘制一条蓝线(从给定位置垂直向下20px)。

  

它不显示任何内容

这意味着您可能在舞台上没有该类的对象。在文档类中,您应该使用addChild来显示包含mLine的类的实例。毫无疑问需要以某种方式调用毫升。您可以在类的构造函数中执行此操作,但是您需要删除最后一个trace语句以避免空指针错误,因为stage将是null

编辑:错过了你说它在Document类中。所以,试着看看是否有其他工作。问题似乎与此功能无关。

答案 1 :(得分:0)

您的代码似乎应该有效。我重写了它以更好地符合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);
}

不确定为什么它根本不会出现在你身上。