0

私は 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>

これは基本的にボタンを示しており、ボタンにカーソルを合わせると、一種のメニューになる別のキャンバスが表示されます。ロールアウトすると、メニューが消えます。

メニューにはいくつかのエフェクトもあり、別のエフェクトが終了する前に 1 つのエフェクトを開始しようとすると、無限ループに陥ります。

私が話していることを再現するには、ボタンをロールオーバーしてからロールアウトし、すぐにロールオーバーします。メニュー効果がループに陥っていることがわかります。

これを回避するにはどうすればよいですか?

4

2 に答える 2

0

イベントの再生に問題がある場合は、イベントに EffectEvent.EFFECT_START リスナーを追加し、それを使用して再生中のイベントを停止します。例えば、

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

または似たようなもの。

于 2009-08-31T08:55:25.313 に答える
0

問題を再現できません。いつどこでマウスを動かしても、ループにはなりません。Flex 3.2 を使用していることに注意してください。多分それはあなたが使用しているバージョンに依存しますか?

ところで、あなたのコードはあなたの説明と完全には一致しません: 表示および非表示にしているキャンバスも含むキャンバスに rollOver および rollOut イベントがあります。推測ですが、効果自体が実際にマウスをキャンバス上に移動させたり、キャンバス上に移動させたりして、rollOver/rollOut をトリガーし、マウスが移動したり移動したりすると想像できます...それは無限ですか?あなたが経験しているループ?

于 2009-08-27T11:51:38.080 に答える