0

だから私は映画クリップ「果物」のインスタンスをたくさん持っています。それらはすべて無名です。

「fruitGroup」という名前のマザー ムービー クリップにそれらを追加しました。

コードが行うことになっているのは、任意のフルーツ インスタンスがクリックされ、そのアニメーションが再生され、永久に破棄されるときです。

マウスが以前に破壊された果物の座標上に来るまで、うまく機能します。実が復活!

fruitGroup.addEventListener(MouseEvent.MOUSE_OVER,fruitOver);
fruitGroup.addEventListener(MouseEvent.CLICK,fruitclick);
fruitGroup.mouseEnabled = false;

function fruitOver(e:MouseEvent)
{
    e.target.play();

}
function fruitclick(e:MouseEvent)
{
    e.target.gotoAndPlay(82);
    if (e.target._currentframe==100)
    {
        e.target.removeChild(e.target);
    }

}

編集:私は自分のセットアップを本当に明確にしませんでした。fruitGroup と CLICK リスナー以外に、セットアップにはさらに 2 つの要素があります。ベース シンボルには 100 フレームがあります。1 ~ 81 はマウスオーバーで再生されるウィグル アニメーション、82 ~ 100 はクリックで再生されるフェードアウト アニメーションです。フレーム 100 のベース シンボルの内側で破壊が発生するのではないでしょうか。

4

1 に答える 1

1

2 つのことを行う必要があります。まず、クリックされたフルーツの 1 つに Event.ENTER_FRAME リスナーを追加して、currentFrame が 100 になったときにイベントを処理するようにし、次に、再生中のフルーツを削除する必要があります。 :

e.target.parent.removeChild(e.target);
e.target.removeEventListener(Event.ENTER_FRAME,yourFunction);

参照に注意してparentください。親があるかどうかを確認する必要があります。そうしないと、問題が発生します。

編集:さて、答えを明確にさせてください。MouseEvent.CLICK リスナーは保持しますが、次のようにします。

fruitGroup.addEventListener(MouseEvent.CLICK,fruitclick);
function fruitclick(e:MouseEvent)
{
    if (e.target is Fruit) {
        e.target.gotoAndPlay(82);
        if (!e.target.hasEventListener(Event.ENTER_FRAME)) 
            e.target.addEventListener(Event.ENTER_FRAME,endPlay);
    }
}

次に、次のように ENTER_FRAME リスナーを追加します。

function endPlay(e:Event):void 
{
    if (e.target._currentframe==100)
    {
        e.target.parent.removeChild(e.target);
        e.target.removeEventListener(Event.ENTER_FRAME,endPlay);
    }
}

fruitGroupこのコードは引き続きメイン タイムラインに配置することも、クリックのリッスンを開始するためにアクセスできる任意のクラスに配置することもできます。

仕組み: 果物をクリックすると、関数fruitClickが呼び出され、イベントのターゲットがクリックされた果物に設定されます。これで参照ができました。リスナーを割り当てて、必要なアニメーションを再生させます。リスナーは、イベントのターゲットがまったく同じ果物である各フレームをアクティブにし、currentFrame100 に達すると、その親を呼び出して果物を解放します (ほとんどの場合、 になりますが、そうでfruitGroupない場合、これはエラーになりません)。 、廃止されたリスナーを削除します。

于 2012-11-13T05:00:53.767 に答える