2013-05-09 68 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