1

我对这个函数感到困惑,该函数在此之前分别使用 xVal 和 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'
    }
4

2 回答 2

1

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

它不显示任何东西

这意味着您可能在舞台上没有该类的对象。在您的文档类中,您应该使用addChild来显示包含mLine. 显然需要以某种方式调用 mLine。您可以在类的构造函数中执行此操作,但您需要删除最后一个跟踪语句以避免空指针错误,因为那时stage会发生null

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

于 2011-09-22T08:59:18.333 回答
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);
}

不知道为什么它根本没有出现在你面前。

于 2011-09-22T09:04:18.707 回答