Перетаскивание не остановится с ActionScript 3 - PullRequest
0 голосов
/ 07 марта 2012

При написании программы на ActionScript 3 я пытаюсь сделать так, чтобы я мог перетаскивать объект из одного места в другое после выполнения каких-то других действий.Проблема в том, что я могу перетаскивать очень хорошо, но, видимо, я не могу остановить перетаскивание, даже если слушатель остановит его.Я не могу понять причину, почему это происходит.Соответствующая часть моего кода выглядит следующим образом:

public function setToDragAndDrop(){
    this.graphic.removeEventListener(MouseEvent.CLICK, rotate);
    this.graphic.addEventListener(MouseEvent.MOUSE_DOWN, drag);
    this.graphic.addEventListener(MouseEvent.MOUSE_UP, endDrag);
}

private function drag(e:MouseEvent):void{
    trace("Dragging...");
    this.graphic.startDrag(true);
    trace(this.graphic.hasEventListener(MouseEvent.MOUSE_UP)); //Returns true
}

private function endDrag(e:MouseEvent):void{
    trace("Stopped dragging.");
    this.graphic.stopDrag();
}

Я не получаю строку «Остановленное перетаскивание» в моем выводе, поэтому endDrag MouseEvent никогда не вызывается, даже если он существует (как следдоказывает).Таким образом, вместо того, чтобы мышь была вверх или вниз, она продолжает перетаскивать.Я обнаружил, что если я нажимаю на другой перетаскиваемый объект, он начинает перетаскивать его.

Я сбит с толку.Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Я разобрался в проблеме.Очевидно, что когда вы создаете фигуру, ее «точка перетаскивания» находится в точке (0,0), или, если вы предварительно создаете фигуру во Flash, верхний левый угол «прямоугольника», который окружает фигуру.Когда вы щелкаете мышью по фигуре, ваша мышь переходит к этой «точке перетаскивания».

По-видимому, если точка перетаскивания фактически не лежит на теле фигуры, перетаскивание не работает.Таким образом, овалы, которые я использовал ранее, не работали, потому что точка перетаскивания была вне формы.Ваш пример сработал, потому что он был создан в точке (0,0), а точка перетаскивания была в точке (0,0).Но если вы рисуете круг, который не находится в точке (0,0), как drawCircle (200,200,100) (т. Е. Рисуете круг в точке (200,200) с радиусом 100), то вы столкнетесь с проблемой, которая возникла у меня из-за перетаскиванияточка не на фигуре.

Решение состоит в том, чтобы создать круг в 0,0, а затем переместить его в нужную вам позицию.Странно, но я наконец-то заставил его работать.

0 голосов
/ 07 марта 2012
public function setToDragAndDrop(){
    this.graphic.removeEventListener(MouseEvent.CLICK, rotate);
    this.graphic.addEventListener(MouseEvent.MOUSE_DOWN, drag);
}

private function drag(e:MouseEvent):void{
    this.graphic.startDrag(true);
    this.graphic.removeEventListener(MouseEvent.MOUSE_DOWN, drag);
    this.graphic.addEventListener(MouseEvent.MOUSE_UP, endDrag);
}

private function endDrag(e:MouseEvent):void{
    this.graphic.stopDrag();
    this.graphic.removeEventListener(MouseEvent.MOUSE_UP, endDrag);
    this.graphic.addEventListener(MouseEvent.MOUSE_DOWN, drag);

}

здесь это работает очень хорошо.

http://wonderfl.net/c/CvWO

Проверьте «скрипку» вспышки.

...