Как убрать старые строки с экрана? - PullRequest
0 голосов
/ 17 ноября 2011

Я перевожу программу с AS2 на AS3.У меня есть простая анимация рисования линий между шарами, которые движутся на экране, но я не могу понять, как использовать clear (), чтобы удалить старые.Вот что я получаю:

enter image description here

Вот код:

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

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Поскольку line является локальной переменной в вашей функции moveBalls, вы продолжаете добавлять больше строк каждый раз, когда вызываете ее (каждый раз создается новая форма, и она сохраняется, а не отбрасывается в конце метода потому что он был добавлен в список отображения).

Сделать line переменной поля и вместо

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

звонок

line.graphics.clear();

в начале метода moveBalls.

1 голос
/ 17 ноября 2011

Попробуйте это демо:

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

Подсказка: Shape более легкий, чем Sprite, и рекомендуется в вашем сценарии.

...