AS3停止拖动所有项目

问题描述:

我有一个识别被按下的ESC键的功能。在这一点上,我想停止拖动所有项目。AS3停止拖动所有项目

我“试过this.stopDrag(),但它不会覆盖MOUSE_DOWN事件。

它有没有办法迫使它‘降’的项目被拖动?

感谢

stage.addEventListener(KeyboardEvent.KEY_DOWN, escapeKeyDown); 

function escapeKeyDown(event : KeyboardEvent):void { 
if (event.keyCode == 27) { 
    trace("ESC"); 
    this.stopDrag(); 
} 
} 
+0

“所有项目” - 因为该事件侦听器只触发一次,所以您只能在一个项目上调用'stopDrag()'(不管this是什么)。 – Cameron 2012-02-25 22:01:40

让你的所有拖动的DisplayObject全局数组:

static var CURRENT_DRAGGING_ITEMS:Array = []; 

然后,每当你CA将开始拖动任何东西,将其添加到数组中。

function onMouseDown(event:MouseEvent):void 
{ 
    event.target.startDrag(); 
    CURRENT_DRAGGING_ITEMS.push(event.target); 
} 

然后,当您按ESC时,只需遍历数组,调用所有项目上的stopDrag,并从数组中移除它们。

function escapeKeyDown(event:KeyboardEvent):void 
{ 
    event.target.stopDrag(); 
    var targetIndex:uint = CURRENT_DRAGGING_ITEMS.indexOf(event.target); 
    CURRENT_DRAGGING_ITEMS.splice(targetIndex, 1); 
} 

确保在从其他位置调用stopDrag时,还要从数组中删除拖动项。

+0

感谢亚当,我试过了event.target.stopDrag();但出现以下错误:错误#1069:在flash.display.Stage上找不到属性startDrag,并且没有默认值。 \t at flightCellMaker_fla :: MainTimeline/escapeKeyDown() – user1203605 2012-02-26 03:32:09

+0

Just tried stopDrag();在它自己和这做了伎俩。谢谢你的帮助! – user1203605 2012-02-26 03:36:39