2012-03-07 2 views
0

При написании программы ActionScript 3 я пытаюсь сделать так, чтобы я мог перетаскивать объект из одного места в другое после выполнения некоторых других действий. Беда в том, что я могу перетащить только отлично, но, видимо, я не могу перестать таскать, даже с слушателем, чтобы остановить. Я не могу понять, почему это происходит. Соответствующая часть моего кода выглядит следующим образом:Drag не останавливается с 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 никогда не вызывался, даже если она существует (как след доказывает) , Таким образом, вместо того, движется ли мышь вверх или вниз, она продолжает перетаскиваться. Я обнаружил, что если я нажму на другой объект с перетаскиванием, тот начнет перетаскивать.

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

ответ

0

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

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

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

+0

рад, что ты справился. – mpm

+0

Как правило, всегда лучше рисовать фигуры, чтобы сохранить 'x' и' y' в 0 и вместо этого устанавливать 'x' и' y' в DisplayObject. Единственный раз, когда вы захотите установить 'x' и' y' во время рисования, требуется, чтобы вы смещали точку регистрации фигуры. Просто полезный совет. – redhotvengeance

0
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

Проверка вспышки "поиграться".

+0

К сожалению, я получаю тот же результат и с этим кодом. Я нажимаю мышь на объект, он начинает двигаться. Я отпустил, и он продолжает двигаться. – Thunderforge

+0

Я добавил полный код (около 100 строк) к пастебину [здесь] (http://pastebin.com/snNahS45). Я не думаю, что в коде есть какие-то другие скрывающиеся биты, которые могут мешать, но, возможно, есть. – Thunderforge

+0

http://wonderfl.net/c/CvWO – mpm