2009-08-26 2 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

На боковой ноте, меньше больше. С точки зрения дизайна, только потому, что вы можете это сделать, это не значит, что вы должны это делать. Необычные эффекты приятны и служат способом дифференцировать ваш продукт, но если они слишком отвлекают или, как в этом случае, становятся проблемой, лучше сосредоточиться на функциональности и меньше на фантастическом. –

ответ

0

Если у вас возникли проблемы с играми, когда они не должны, просто добавьте слушателей EffectEvent.EFFECT_START к своим событиям и используйте их, чтобы остановить любые игровые события. например,

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

Или что-то подобное.

+0

В итоге я сделал что-то похожее на то, что вы предложили. –

0

Я не могу воспроизвести вашу проблему. Независимо от того, где/когда я перемещаю мышь в или из нее, она никогда не переходит в цикл. Обратите внимание, что я использую Flex 3.2. Может быть, это зависит от того, какую версию вы используете?

Btw, ваш код не полностью соответствует вашему описанию. У вас есть события rollOver и rollOut на холсте, которые также содержат холст, который вы показываете и скрываете. Просто догадаться, но я могу представить, что сам эффект на самом деле заставляет вашу мышь больше или больше над холстом, запуская rollOver/rollOut, которые затем снова заставляют мышь перемещаться в/из ... Это бесконечное цикл, который вы испытываете?

Смежные вопросы