2009-04-08 62 views
2

我在ActionScript 3中遇到了嘗試使用redispatch鼠標事件的問題,我承認這有點不可思議。我已縮小到MouseEvent.clone()方法出現,好吧,完全破碎。以下事件處理程序:ActionScript MouseEvent.clone()顯示中斷?

private function handleMouseMove(evt : MouseEvent) : void 
    { 
     trace("mousemove", evt.stageX, evt.stageY); 
     var newEvt : MouseEvent = evt.clone() as MouseEvent; 
     trace("mousemoveclone", newEvt.stageX, newEvt.stageY); 
    } 

結果在下面的輸出,循環往復:

mousemove 167 206 
mousemoveclone 0 0 

這符合什麼,我再次指派的MouseEvent代碼被接受,因此我的破克隆功能假說。

這與鏈接的文檔指出應該發生的事情直接矛盾,除非我錯過了某些東西。我完全喪失了我所做的(或不這樣做),可能會導致這種行爲。 AS3傢伙是否真的忘記了在Event.clone()上閱讀他們自己的文檔?

我可以通過改用函數對象來解決這個問題,但我不想這樣做。有任何想法嗎?

編輯: localX和localY成員似乎正在克隆,這讓我更擔心這裏發生了什麼。

回答

3

這是一個已知的錯誤。你可以在這裏看到這個bug報告:http://bugs.adobe.com/jira/browse/FP-343

其他的東西都應該被克隆。您可以隨時手動分配stageX和stageY,直到錯誤得到修復。

+1

我剛剛失去了對Adobe現在差不多一年之久的Adobe的尊重。感謝您的鏈接。 – 2009-04-08 00:24:08

2

我意識到這個線程是7個月休眠,但只是更新了一下 - 這在FP10和Flex4中仍然有效。如果您重新分派活動,也會發生這種情況。即:

private function mouseListener(e:MouseEvent):void 
{ 
    dispatchEvent(e); 
} 

是dispatchEvent()調用似乎是一個克隆()的等價物,所以stageX和不自然的被設置爲0

0

這是一個非常古老的問題,但它是什麼來當我谷歌搜索解決方案,這裏有什麼是不夠全面。

這個問題沒有被「固定」的原因是因爲它按預期工作。當您調用getter時,使用事件的目標執行localToGlobal轉換,會計算stageX和stageY值。這是必要的,以便即使目標對象在事件發送後更改了位置,縮放或旋轉,數字仍保持正確。

你兩個選擇,如果你真的需要重新分派的MouseEvent用正確的stageX和不自然的價值觀是:

  1. 創建的MouseEvent的自定義子類,覆蓋stageX和不自然的干將。您可以存儲原始目標並自己執行localToGlobal計算,也可以使用克隆原始事件時存在的值存儲stageX和stageY的靜態值。

  2. 延伸Sprite並將您的調度程序添加到舞臺,以便股票MouseEvent可以正常工作。