2012-02-25 2 views
0

У меня есть функция, которая распознает нажатие клавиши ESC. В этот момент я хочу прекратить перетаскивать все предметы.AS3 Stop Перетаскивание всех элементов

я "пробовал 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()' только на одном элементе (независимо от этого), так как этот прослушиватель событий срабатывает только один раз. – Cameron

ответ

0

Сделать глобальный массив всех тащат DisplayObjects:

static var CURRENT_DRAGGING_ITEMS:Array = []; 

Тогда, когда вы ча ll startDrag на что угодно, добавьте его в массив.

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: свойство startDrag не найдено на flash.display.Stage и нет значения по умолчанию. \t at flightCellMaker_fla :: MainTimeline/escapeKeyDown() – user1203605

+0

Только что попробовал stopDrag(); на его собственном, и это сделало трюк. Спасибо за вашу помощь! – user1203605

Смежные вопросы