2013-05-09 4 views
0
function Drag(event:MouseEvent):void { 
    if ((event.target.parent == InventoryMenu) && (event.target is item)) { 
     var picked:item = item(event.target); 
     stage.addEventListener(MouseEvent.MOUSE_UP, Drop); 
     InventoryArrowDown.addEventListener(MouseEvent.MOUSE_OVER, InventoryNav("down")); 
     InventoryArrowUp.addEventListener(MouseEvent.MOUSE_OVER, InventoryNav("up")); 

     function Drop(event:MouseEvent):void { 
      if ((event.target.parent == InventoryMenu) && (event.target is item)) { 
       var dropped:item = item(event.target);   
       if ((event.target is item) && (event.target.parent == InventoryMenu)) { 
        if (picked.itemdata("workswith") == dropped.name) { 
         var itemname:item = item(FetchResult(picked, dropped)); 
         itemname.addChild(itemname.itemdata("filename")); 
         InventoryMenu.removeChild(picked); 
         InventoryMenu.removeChild(dropped); 
         InventoryMenu.addChild(itemname); 
         InventoryUpdate(); 
        } else if (picked.name != dropped.name) { 
         trace("No son compatibles"); 
        } 
        stage.removeEventListener(MouseEvent.MOUSE_UP, Drop); 
        InventoryArrowDown.removeEventListener(MouseEvent.MOUSE_OVER, InventoryNav("down")); 
        InventoryArrowUp.removeEventListener(MouseEvent.MOUSE_OVER, InventoryNav("up")); 
       } 
      } 
     } 
    } 
} 

По какой-то причине removeEventListener в InventoryArrowDown и InventoryArrowUp не работает. Я уверен, что маршрут правильный, поскольку это прямая копия для копирования из addEventListener и не использует переменные.removeEventListener не работает

Не знаете, что случилось?

+0

Эти конвенции глинобитные код сделает ваш код намного легче читать. Имена методов и имена экземпляров должны начинаться с строчной буквы. Имена классов должны начинаться с буквы верхнего регистра. – duTr

ответ

0

Жесткий, чтобы помочь вам, не видя код InventoryNav, но, возможно, проблема в том, что вы должны удалить слушателей событий перед вашими испытаниями.

Кроме того, вы должны написать два разных обработчика вместо использования одного и передать аргумент, как вы.

Вот модифицированная версия кода, который может помочь:

private function drag(event:MouseEvent):void { 
    if ((event.target.parent == inventoryMenu) && (event.target is Item)) { 
     var picked:Item = Item(event.target); 
     stage.addEventListener(MouseEvent.MOUSE_UP, drop); 
     inventoryArrowDown.addEventListener(MouseEvent.MOUSE_OVER, inventoryNavDown); 
     inventoryArrowUp.addEventListener(MouseEvent.MOUSE_OVER, inventoryNavUp); 
    } 
} 

private function drop(event:MouseEvent):void { 
    stage.removeEventListener(MouseEvent.MOUSE_UP, drop); 
    inventoryArrowDown.removeEventListener(MouseEvent.MOUSE_OVER, inventoryNavDown); 
    inventoryArrowUp.removeEventListener(MouseEvent.MOUSE_OVER, inventoryNavUp); 

    if ((event.target.parent == inventoryMenu) && (event.target is Item)) { 
     var dropped:Item = Item(event.target);   
     if ((event.target is Item) && (event.target.parent == inventoryMenu)) { 
      if (picked.itemdata("workswith") == dropped.name) { 
       var itemname:Item = Item(fetchResult(picked, dropped)); 
       itemname.addChild(itemname.itemdata("filename")); 
       inventoryMenu.removeChild(picked); 
       inventoryMenu.removeChild(dropped); 
       inventoryMenu.addChild(itemname); 
       inventoryUpdate(); 
      } else if (picked.name != dropped.name) { 
       trace("No compatible sons"); 
      } 
     } 
    } 
} 
+0

Да, спасибо. Вчера я пришел к такому же выводу, его смешно. Я удалил аргументы из функции и переместил removeeventlisteners за пределы условных обозначений. Прекрасно работает! – user2347770