質問

私は上から下へ、ステージ全体をカバーNAVアイテムでウェブサイトを開発しています(以下、変更された画像を参照)、ユーザーがマウスでのステージを終了することは非常に簡単です、「に必要なMouseEvent.MOUSE_OUTイベントをトリガしませオフ」NAVアイテムが言っています。

私はマウスがステージを去ったときを検出し、任意の有効なNAVの項目をオフにするEvent.MOUSE_LEAVEを使用する必要がありますか。それは私がやろうとしてますが、トラブル私のリスナーからの任意の出力を得ることを持っていたものです。任意のアイデア?

http://marcysutton.com/blog /wp-content/uploads/2010/01/redpropeller.pngする

のFlash IDEでのムービークリップに関連付けられたクラスの場合、これはEvent.MOUSE_LEAVEリスナを登録するための正しい構文ですか?関係なく、私が何を何もしていないように思えません。それは私が発射するイベントのために、ブラウザでムービーを埋め込むために持っている場合ですか?

this.stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);

ここに私のMainNav.asクラスがあります:

package com.redpropeller {

import com.greensock.*;
import com.greensock.plugins.*;
import flash.display.*;
import flash.text.*;
import flash.events.*;

public class MainNav extends MovieClip { // MainNav is a movieclip in the IDE

    public var colors:Array;

    public function MainNav():void {
        colors = new Array(0xee3124, 0xc72a1f, 0xa62c24, 0x912923, 0x7e221c);
        TweenPlugin.activate([TintPlugin]);

        // trying to target stage through this object
        this.stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);

        for(var i:Number=0; i<this.numChildren; i++){
            var n = this.getChildAt(i);
            n.useHandCursor = true;
            n.buttonMode = true;

            n.addEventListener(MouseEvent.MOUSE_OVER, navBtnOn);
            n.addEventListener(MouseEvent.MOUSE_OUT, navBtnOff);
        }
    }
    public function mouseLeaveListener(e:Event):void {
        trace('mouseleave'); // nothing ever happens

    }
    private function navBtnOn(e:MouseEvent):void {
        TweenLite.to(e.currentTarget.bar_mc, 0.01, {tint:0x333333});
    }
    private function navBtnOff(e:MouseEvent):void {
        TweenLite.to(e.currentTarget.bar_mc, 0.01,
            {tint:uint(colors[this.getChildIndex(MovieClip(e.currentTarget))])});
            // changes color back to specific tint
    }
}

}
役に立ちましたか?

解決

あなたは、コンストラクタでMOUSE_LEAVEのイベントリスナーを作成しようとしています。これはMainNavにはaddChild()メソッドを介してステージに追加されていない場合、ステージオブジェクトがまだ存在しない可能性があります。 MainNavは、設計時にステージにすでにある場合は、ステージがすぐに利用できないでしょうということはまだ可能です。 Event.ADDED_TO_STAGEリスナーを設定:するDisplayObject(MovieClipの、スプライトなど)を継承するクラスの場合、私は、コンストラクタで唯一のことを行います。そのリスナーは、親コンテナからオブジェクトがはaddChildを介してステージの表示スタックに追加されているinit()メソッドを()トリガ、またはオブジェクトが設計時にステージ上に既にある場合。私のinit()メソッドが呼び出されると、私は舞台プロパティが利用可能になることを知っています。

あなたのコンストラクタでは、ステージはまだインスタンスに存在しないかもしれませんが、あなたは、ランタイムエラーを取得する必要があります。ただし、先のステージの「この」キーワードを使用しています。あなたはObjectから継承したクラスでは「この」を使用する場合、それがいることを作成しようとするため、プロパティが存在しない場合、コンパイラはエラーをスローしません(あなたのクラスは、Object> MovieClip-> DisplayObject-> EventDispatcher-を経由して行います) thisの一員としての性質。 Objectクラスは動的であるため、これは新しいプロパティは、ヘッダー内のクラス変数として宣言することなく、いつでも作成することができることを意味し、起こる - あなたはちょうどその動的プロパティを使用する際に「この」キーワードを使用する必要があります。あなたがthis.stageを使用すると、ステージはクラスが存在しない場合はあなたのためのプロパティのステージを作成します。しかし、これはあなたが望む段階ではないので、リスナーはただ何もしない、空のオブジェクトにアタッチなっています。舞台を参照すると、私は確信しているとき、「これは」あなたには、いくつかの時点でエラーが表示されます削除してください。一般的には、コンパイラはそのプロパティの型エラーを無視することから、プロパティのthisを使用することをお勧めしません。

あなたはIDEで動作しないことMOUSE_LEAVE上記1つのコメントに言及したが、私はCS4からこれをテストし、それが作業を行います。あなたは、ブラウザのFlash Playerプラグインに比べIDEのFlash Playerのパフォーマンスの違いを目の当たりにすることができます。いくつかのケースではSWFの迅速負荷とステージがすぐに利用可能であるならば、あなたのステージイベントリスナーは、コンストラクタから動作しますが、それは信頼性がありません。 ADDED_TO_STAGEイベント後に呼び出され、「この」キーワードを使用していないのinit()メソッドにそのリスナーを移動します。

他のヒント

答:Event.MOUSE_LEAVEはIDEで起動しません。映画は、HTMLページに埋め込まれている場合は正常に動作します。あなたの助けをありがとう!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top