【问题标题】:How do I clear the old lines off the screen?如何清除屏幕上的旧线条?
【发布时间】:2011-11-16 22:35:15
【问题描述】:

我正在将一个程序从 AS2 翻译到 AS3。我有一个简单的动画在屏幕上移动的球之间绘制线条,但我不知道如何使用 clear() 删除旧的。这就是我得到的:

代码如下:

function moveBalls(e:Event):void
        {
            var nodeA:MovieClip;
            var nodeB:MovieClip;
            var line:Sprite = new Sprite();

            for (var i:uint = 0; i < getLength(nodes); i++)
            {
                nodeA = nodes[i];
                for (var j:uint = i + 1; j < getLength(nodes); j++)
                {
                    nodeB = nodes[j];
                    var dx:Number = nodeB.x - nodeA.x;
                    var dy:Number = nodeB.y - nodeA.y;
                    var dist:Number = Math.sqrt(dx * dx + dy * dy);
                    if (dist < minDist)
                    {
                        line.graphics.lineStyle(1, 0x00ffff);
                        line.graphics.moveTo(nodeA.x+nodeA.width/2, nodeA.y+nodeA.height/2);
                        line.graphics.lineTo(nodeB.x+nodeB.width/2, nodeB.y+nodeB.height/2);
                        addChild(line);

                        var ax:Number = dx * k * .5;
                        var ay:Number = dy * k * .5;
                        nodeA.vx += ax;
                        nodeA.vy += ay;
                        nodeB.vx += ax;
                        nodeB.vy += ay;
                    }
                }
            }
        }

【问题讨论】:

    标签: flash actionscript-3 flash-builder


    【解决方案1】:

    试试这个演示:

    var s:Shape = new Shape();
    addChild(s);
    
    
    stage.addEventListener(MouseEvent.CLICK, _click);
    function _click(e:MouseEvent=null):void
    {
        s.graphics.clear();
        s.graphics.lineStyle(2, 0xFF0000);
        s.graphics.lineTo(
            Math.random()*stage.stageWidth,
            Math.random()*stage.stageHeight
        );
    }
    
    _click();
    

    提示:ShapeSprite 更轻量级,建议在您的场景中使用。

    【讨论】:

    • 我得到了正确清除行的方法,但是当我将行移出函数时,它每次都会被覆盖,最后我只得到一行,而不是多行。感谢您提供有关 Shape 的提示。
    • 好的,我不知道怎么做,但是在重新评估您的建议后,它确实有效,不仅如此,而且我无法按照我上面描述的方式打破它。所以谢谢。
    • @Sam Shudder :P Flash 有时很疯狂。
    【解决方案2】:

    由于linemoveBalls 函数中的局部变量,因此每次调用它时都会不断添加更多行(每次都会创建一个新形状,并且在方法结束时保留而不是丢弃它,因为它已添加到显示列表中)。

    line 设为字段变量,而不是

    var line:Shape = new Shape (); 
    // I took @Marty Wallace's suggestion and went with Shape here
    

    打电话

    line.graphics.clear();
    

    在 moveBalls 方法的开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多