2013-05-09 66 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")); 
       } 
      } 
     } 
    } 
} 

出于某种原因,InventoryArrowDown和InventoryArrowUp上的removeEventListener不起作用。我相当确定路由是正确的,因为它是来自addEventListener的直接复制粘贴,并且它不使用变量。removeEventListener不起作用

任何线索有什么不对?

+0

以下Adobe代码约定将使你的代码更容易阅读。方法名称和实例名称应以小写字母开头。类名应该以大写字母开头。 – duTr 2013-05-10 00:46:47

回答

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

是的,谢谢。我昨天得出了完全相同的结论,它很有趣。我从函数中删除了参数,并将removeeventlistener移到了条件之外。完美的作品! – user2347770 2013-05-10 16:50:03