2009-08-26 25 views
0

我是Flex的初學者,工作時間最艱難。如何處理Flex中的競爭效應?

現在我正在處理處理競爭效果時遇到的問題。

請看下面的代碼。我基本上已經創建了一個短重複性測試樣品這說明這個問題,我面對的:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="400"> 

    <mx:Script> 
     <![CDATA[ 
      private function showmenu():void 
      {Menu.visible= true; 
      } 
      private function hidemenu():void 
      {Menu.visible= false; 
      } 
     ]]> 
    </mx:Script> 

    <mx:WipeDown id="wipedown" duration="900"/> 
    <mx:WipeUp id="wipeUp" duration="900" /> 



<mx:Canvas id="main" width="400" height="400" 
    rollOver="showmenu();" rollOut="hidemenu();"> 
    <mx:Button label="Show Menu" 
     x="100" y="20"> 
     </mx:Button> 

     <mx:Canvas id="Menu" visible="false" 
     width="100" height="200" 
     backgroundColor="#B8B8B8" x="96" y="35" 
     showEffect="{wipedown}" hideEffect="{wipeUp}"> 

     </mx:Canvas> 

</mx:Canvas>  



</mx:Application> 

這基本上顯示了一個按鈕,當您滾動按鈕,其他畫布,這將是一種將顯示菜單。當您推出時,菜單消失。

該菜單也有一些效果,如果你試圖在另一個效果開始之前開始一個效果,它會進入無限循環。

要重現什麼,我再次談論,側翻按鈕,然後部署然後迅速側翻。你會看到菜單效果卡住了一個循環。

我該如何編碼?

+0

在旁註上,少即是多。從設計的角度來看,僅僅因爲你可以做到這一點並不意味着你應該這樣做。花哨效果很好,可以作爲區分你的產品的一種方式,但是如果它們太分散注意力,或者在這種情況下會成爲問題,那麼最好將注意力集中在功能上,而不是在意想不到的方面。 – 2009-08-26 16:40:58

回答

0

如果您在播放不應該播放的事件時遇到問題,只需將EffectEvent.EFFECT_START偵聽器添加到您的事件中,並使用它來停止任何播放事件。例如,

function _handleEffectStart(e:EffectEvent):void { 
    if(e.target == wipedown) { 
    wipeup.stop(); 
    } else { 
    wipedown.stop(); 
    } 
} 

或類似的東西。

+0

我最終做了類似於你所建議的事情。 – 2009-09-01 11:36:30

0

我無法重現您的問題。無論我在何處/何時將鼠標移入或移出,它都不會進入循環。請注意,我正在使用Flex 3.2。也許這取決於你使用的是哪個版本?

順便說一句,你的代碼並不完全符合你的描述:你在畫布上有rollOver和rollOut事件,它也包含你正在顯示和隱藏的畫布。只是猜測,但我可以想象,效果本身實際上會導致您的鼠標已經超過或不在畫布上,觸發rollOver/rollOut,然後再次導致鼠標移入/移出...是無限的你正在經歷的循環?