Actionscript 3 Drag Won';不要停止使用ActionScript3

Actionscript 3 Drag Won';不要停止使用ActionScript3,actionscript-3,drag-and-drop,Actionscript 3,Drag And Drop,在编写ActionScript3程序的过程中,我试图使它能够在完成其他操作后将对象从一个位置拖到另一个位置。问题是,我可以拖动的很好,但显然我不能停止拖动,即使有一个听众让它停止。我不明白为什么会这样。我的代码的相关部分如下: public function setToDragAndDrop(){ this.graphic.removeEventListener(MouseEvent.CLICK, rotate); this.graphic.addEventListener(Mo

在编写ActionScript3程序的过程中,我试图使它能够在完成其他操作后将对象从一个位置拖到另一个位置。问题是,我可以拖动的很好,但显然我不能停止拖动,即使有一个听众让它停止。我不明白为什么会这样。我的代码的相关部分如下:

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 MouseeEvent,即使它存在(正如跟踪所证明的)。因此,无论鼠标是向上还是向下,它都会继续拖动。我发现,如果我单击另一个可拖动的对象,该对象将开始拖动

我很困惑。任何帮助都将不胜感激

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

}
它在这里工作得很好

检查闪光灯“小提琴”

它在这里工作得很好


检查一下闪光灯的“小提琴”键。

我找到了问题所在。显然,当您创建形状时,它的“拖动点”位于(0,0),或者如果您在Flash中预制作形状,则位于环绕图形的“矩形”的左上角。当您单击形状时,鼠标会跳到此“拖动点”

显然,如果拖动点实际上不在形状的主体上,则拖放不起作用。所以我之前使用的椭圆不起作用,因为拖动点偏离了形状。您的示例确实有效,因为它是在(0,0)处创建的,而您的拖动点位于(0,0)。但是如果你画了一个不在(0,0)的圆,像drawCircle(200100)(即在点(200200)画一个半径为100的圆),那么你会遇到我遇到的问题,因为拖动点不在形状上


然后,解决方案是在0,0处创建圆,然后将其移动到所需的位置。这很奇怪,但我终于让它工作了。

我解决了这个问题。显然,当您创建形状时,它的“拖动点”位于(0,0),或者如果您在Flash中预制作形状,则位于环绕图形的“矩形”的左上角。当您单击形状时,鼠标会跳到此“拖动点”

显然,如果拖动点实际上不在形状的主体上,则拖放不起作用。所以我之前使用的椭圆不起作用,因为拖动点偏离了形状。您的示例确实有效,因为它是在(0,0)处创建的,而您的拖动点位于(0,0)。但是如果你画了一个不在(0,0)的圆,像drawCircle(200100)(即在点(200200)画一个半径为100的圆),那么你会遇到我遇到的问题,因为拖动点不在形状上


然后,解决方案是在0,0处创建圆,然后将其移动到所需的位置。这很奇怪,但我终于让它工作了。

不幸的是,我也用这段代码得到了同样的结果。我把鼠标按在物体上,它开始移动。我放开它,它继续移动。我已经将完整的代码(大约100行)添加到一个粘贴箱中。我不认为代码中有任何其他潜在的位可能会干扰,但可能有。我看到你的代码和我的代码之间的最大区别是,你的代码直接创建了一个形状,而我的代码包含我在Flash CS5中创建的引用圆。另外,我的类只是一个容器,所以它不扩展Sprite。这可能与我看到的奇怪行为有关吗?我还发现,如果我在拖动过程中双击另一个对象的正中心,我会得到以下输出:“停止拖动。TypeError:Error#1006:RemovelListener不是一个函数。at Piece/endDrag()”初始对象仍在被拖动。不幸的是,我也得到了与该代码相同的结果。我把鼠标按在物体上,它开始移动。我放开它,它继续移动。我已经将完整的代码(大约100行)添加到一个粘贴箱中。我不认为代码中有任何其他潜在的位可能会干扰,但可能有。我看到你的代码和我的代码之间的最大区别是,你的代码直接创建了一个形状,而我的代码包含我在Flash CS5中创建的引用圆。另外,我的类只是一个容器,所以它不扩展Sprite。这可能与我看到的奇怪行为有关吗?我还发现,如果我在拖动过程中双击另一个对象的正中心,我会得到以下输出:“停止拖动。TypeError:Error#1006:RemovelListener不是一个函数。at Piece/endDrag()”初始对象仍在拖动。绘制形状时,通常最好将
x
y
保持为0,而将DisplayObject的
x
y
设置为0。在绘制过程中,唯一需要设置
x
y
的时间是要偏移形状的注册点。这只是一个有用的提示。在绘制形状时,通常最好将
x
y
保持为0,而将DisplayObject的
x
y
设置为0。在绘制过程中,唯一需要设置
x
y
的时间是要偏移形状的注册点。只是一个有用的提示。