2009-08-26 14 views
0

Ich bin ein Anfänger bei Flex, und habe die härteste Zeit, mit Effekten zu arbeiten.Wie mit konkurrierenden Effekten in Flex umgehen?

Im Moment beschäftige ich mich mit den Problemen im Umgang mit konkurrierenden Effekten.

Bitte sehen Sie sich den folgenden Code an. Ich habe erstellt im Grunde eine kurze reproduzierbare Tests Probe, die das Problem zeigt, ich bin vor:

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

Diese im Grunde ein Button zeigt, und wenn Sie auf die Schaltfläche überschlagen, eine andere Leinwand, die eine Art sein wird von Menü, wird angezeigt. Wenn Sie das Menü öffnen, wird das Menü ausgeblendet.

Das Menü hat auch einige Effekte, und wenn Sie versuchen, einen Effekt zu starten, bevor ein anderer vorbei ist, gelangt er in eine Endlosschleife.

zu reproduzieren, was ich rede, Roll die Schaltfläche und dann Rollout und dann schnell Roll wieder. Sie werden sehen, dass die Menüeffekte in einer Schleife hängen bleiben.

Wie codiere ich das?

+0

Nebenbei bemerkt, weniger ist mehr. Aus der Sicht des Designs bedeutet das nicht, dass Sie es tun sollten. Fancy-Effekte sind nett und dienen als eine Möglichkeit, Ihr Produkt zu unterscheiden, aber wenn sie zu störend sind oder, wie in diesem Fall, ein Problem werden, ist es besser, sich mehr auf die Funktionalität und weniger auf das Fantastische zu konzentrieren. –

Antwort

0

Wenn bei der Wiedergabe von Ereignissen Probleme auftreten, die sie nicht beheben sollen, fügen Sie EffectEvent.EFFECT_START-Listener zu Ihren Ereignissen hinzu und verwenden Sie sie, um die Wiedergabe von Ereignissen zu stoppen. B.

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

Oder etwas ähnliches.

+0

Ich habe etwas getan, was dem ähnlich ist, was Sie vorgeschlagen haben. –

0

Ich kann Ihr Problem nicht reproduzieren. Egal wo/wann ich meine Maus rein- oder rausbewege, es geht nie in eine Schleife. Beachten Sie, dass ich Flex 3.2 verwende. Vielleicht hängt es davon ab, welche Version du verwendest?

Übrigens stimmt Ihr Code nicht vollständig mit Ihrer Beschreibung überein: Sie haben die Ereignisse rollOver und rollOut auf der Zeichenfläche, die auch die Zeichenfläche enthält, die Sie ein- und ausblenden. Nur eine Vermutung, aber ich kann mir vorstellen, dass der Effekt selbst tatsächlich dazu führt, dass Ihre Maus über oder nicht über der Leinwand ist, was den rollOver/rollOut auslöst, was wiederum dazu führt, dass sich die Maus ein- und ausbewegt ... Ist das das Unendliche? Schleife, die du erlebst?