Как бороться с конкурирующими эффектами во Flex? - PullRequest
0 голосов
/ 26 августа 2009

Я новичок во 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>

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

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

Чтобы воспроизвести то, о чем я говорю, ролловер кнопку, затем свиток и затем снова быстрый ролловер . Вы увидите, что эффекты меню зациклены.

Как мне обойти это?

Ответы [ 2 ]

0 голосов
/ 31 августа 2009

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

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

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

0 голосов
/ 27 августа 2009

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

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

...