Линия из одного экземпляра в другой не работает Action Script 3.0 - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь создать подвижные экземпляры, которые можно перетаскивать, и у которых есть линия, соединяющая их, которая обновляется автоматически.

Дело в том, что исходная строка просто идет случайным образом и не обновляется какэкземпляры (mc1, mc2) перетаскиваются.Вот код, который я получил до сих пор:

 mc1.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void
{
    e.currentTarget.startDrag();
});

mc1.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void
{
    e.currentTarget.stopDrag();
});
mc2.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void
{
    e.currentTarget.startDrag();
});

mc2.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void
{
    e.currentTarget.stopDrag();
});

var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0x000000);
mc.graphics.lineStyle(2,0x000000);

//start drawing the line
mc.graphics.moveTo(mc1.x,mc1.y);
mc.graphics.lineTo(mc2.x,mc2.y);
mc.graphics.endFill();

//Position your new movie clip
addChild(mc);

Может кто-нибудь сказать мне, где я ошибся?

Спасибо большое за любую помощь !!!!

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

Что вам нужно сделать, это зафиксировать движение мыши пользователя, когда он перетаскивает мувиклип.

Сначала создайте переменную isDragging var isDragging:Boolean = false; и установите для нее значение true, если мышь нажата, и false, когда мышь вверх.

Затем добавьте прослушиватель событий MouseEvent.MOUSE_MOVE на временную шкалу линии

addEventListener(MouseEvent.MOUSE_MOVE, function (e:MouseEvent):void
{
    if (isDragging) {
        drawConnectiveLine(mc1, mc2);
    }
    return;
});

Метод drawConnectiveLine обновит векторную форму линии для перемещения в {x, y} фрагментов ролика.

function drawConnectiveLine(d:DisplayObject, d2:DisplayObject):void {
    mc.graphics.clear();
    mc.graphics.lineStyle(2,0);
    mc.graphics.moveTo(d.x,d.y);
    mc.graphics.lineTo(d2.x,d2.y);
}

Изменения в уже существующем скрипте:

var isDragging:Boolean = false;
var mc:MovieClip = new MovieClip();
mc.graphics.lineStyle(2,0);
mc.graphics.moveTo(mc1.x,mc1.y);
mc.graphics.lineTo(mc2.x,mc2.y);
addChild(mc);

mc1.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void
{
    isDragging = true;
    e.currentTarget.startDrag();
});

mc1.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void
{
    isDragging = false;
    e.currentTarget.stopDrag();
});

mc2.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void
{
    isDragging = true;
    e.currentTarget.startDrag();
});
mc2.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void
{
    isDragging = false;
    e.currentTarget.stopDrag();
});
addEventListener(MouseEvent.MOUSE_MOVE, function (e:MouseEvent):void
{
    if (isDragging) {
        mc.graphics.clear();
        mc.graphics.lineStyle(2,0);
        mc.graphics.moveTo(mc1.x,mc1.y);
        mc.graphics.lineTo(mc2.x,mc2.y);
    }
});
0 голосов
/ 02 ноября 2011

Блок ниже может помочь вам.

mc.graphics.clear();
//mc.graphics.beginFill(0x000000); //no need fills
mc.graphics.lineStyle(2,0);

//start drawing the line
mc.graphics.moveTo(mc1.x,mc1.y);
mc.graphics.lineTo(mc2.x,mc2.y);
//mc.graphics.endFill(); //no need to end it.
...