2009-08-26 4 views
0

Je suis débutant chez Flex et j'ai beaucoup de mal à travailler avec Effects.Comment gérer les effets concurrents dans Flex?

À l'heure actuelle, je fais face aux problèmes rencontrés lorsque je fais face à des effets concurrents.

Veuillez regarder le code suivant. J'ai essentiellement créé un échantillon court tests reproductibles qui montre le problème que je suis face:

<?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> 

Cela montre essentiellement un bouton, et quand vous rouler sur le bouton, une autre toile, qui va être une sorte du menu, sera affiché. Lorsque vous déployez, le menu disparaît. Le menu a aussi quelques effets, et si vous essayez de démarrer un effet avant qu'un autre ne soit terminé, il se transforme en boucle infinie.

Reproduire ce dont je parle, capotage le bouton, puis déploiement puis rapidement capotage à nouveau. Vous verrez que les effets du menu sont bloqués en boucle.

Comment coder autour de cela?

+0

D'un côté, moins c'est plus. Du point de vue de la conception, ce n'est pas parce que vous pouvez le faire que vous devriez le faire. Les effets de fantaisie sont agréables et servent à différencier votre produit, mais s'ils sont trop distrayants ou, comme dans ce cas, deviennent un problème, il vaut mieux se concentrer davantage sur la fonctionnalité et moins sur le fantastique. –

Répondre

0

Si vous ne parvenez pas à lire des événements alors qu'ils ne le devraient pas, ajoutez simplement des écouteurs EffectEvent.EFFECT_START à vos événements et utilisez-les pour arrêter les événements de lecture. par exemple,

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

Ou quelque chose de similaire.

+0

J'ai fini par faire quelque chose de similaire à ce que vous avez suggéré. –

0

Je ne peux pas reproduire votre problème. Peu importe où et quand je déplace ma souris, elle ne passe jamais en boucle. Notez que j'utilise Flex 3.2. Peut-être que cela dépend de la version que vous utilisez? Btw, votre code ne correspond pas complètement à votre description: Vous avez les événements rollOver et rollOut sur le canevas qui contient également le canevas que vous affichez et masquez. Juste une conjecture, mais je peux imaginer que l'effet lui-même fait en sorte que votre souris soit plus ou moins sur la toile, ce qui déclenche le rollOver/rollOut, qui à son tour fait bouger la souris ... Est-ce l'infini? boucle que vous rencontrez?

Questions connexes