Остановка всей анимации при переходе по клику в AS3

В AS2 я бы просто добавил stop(); в clickTag, но я не уверен, как это сделать в AS3.

Вот пример кода моего clickTag

package 
{
import com.greensock.*;
import com.greensock.easing.*;

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;

public class main300x250 extends MovieClip
{
public var paramList:Object;

    public function main300x250()
    {
        addEventListener(Event.ADDED_TO_STAGE, init);

    }

    private function init(e:Event):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        myBTN.addEventListener(MouseEvent.CLICK, clickHandler);
        myBTN.addEventListener(MouseEvent.ROLL_OVER, clickOver);
        myBTN.addEventListener(MouseEvent.ROLL_OUT, clickOut);


        TweenNano.from( t1, .5, {alpha:0, scaleX:0, scaleY:0, ease:Back.easeOut, delay:0});
        TweenNano.to( t1, .5, {scaleX:0, scaleY:0, ease:Back.easeIn, delay:1.75});

        TweenNano.from( f2.a, .35, {y:"+35", alpha:0, delay:2.25});
        TweenNano.from( f2.b, .35, {y:"+35", alpha:0, delay:2.4});
        TweenNano.from( f2.nugsL, .5, {x:"-200", ease:Quad.easeIn, delay:2.75});
        TweenNano.from( f2.nugsR, .5, {x:"+200", ease:Quad.easeIn, delay:3.15});

        TweenNano.to( f2.a, .25, {y:"+15", alpha:0, delay:5.5});
        TweenNano.to( f2.b, .25, {y:"+15", alpha:0, delay:5.65});

        TweenNano.from( f3.a, .35, {y:"+35", alpha:0, delay:5.75});
        TweenNano.to( f2.nugsL, .5, {x:6.5, y:30.5, ease:Quad.easeIn, delay:6.2});
        TweenNano.to( f2.nugsR, .5, {x:6.5, y:30.5, ease:Quad.easeIn, delay:6.2});
        TweenNano.from( f3.d, .5, {x:"-20", y:"+20", alpha:0, delay:6.6});

        TweenNano.to( f3.a, .25, {y:"+15", alpha:0, delay:8.75});
        TweenNano.to( f2.nugsL, .25, {x:"+350", delay:8.9});
        TweenNano.to( f2.nugsR, .25, {x:"+350", delay:8.9});
        TweenNano.to( f3.d, .15, {alpha:0, delay:9});           

        TweenNano.from(t2, 0.65, {delay:9.15, y:'+='+250, ease:Back.easeOut});

        TweenNano.from(t2.a, 0.2, {delay:9.25, y:'+='+75});
        TweenNano.from(t2.b, 0.2, {delay:9.45, y:'+='+75});
        TweenNano.from(t2.c, 0.2, {delay:9.45, y:'+='+75});

        TweenNano.to(t2.b, 0.25, {delay:10.2, x:"-30"});
        TweenNano.to(t2.c, 0.25, {delay:10.2, x:"-30"});
        TweenNano.to(t2.d, 0.25, {delay:10.2, alpha:1, x:"+31"});

        TweenNano.to(endLockUp, 1, {delay:10.2, scaleX:1.15, scaleY:1.15, ease:Quad.easeIn});
        TweenNano.from(endLockUp.a, 0.2, {delay:10.2, y:"+200"});
        TweenNano.from(endLockUp.b, 0.2, {delay:10.4, x:"-200"});
        TweenNano.from(endLockUp.c, 0.2, {delay:10.4, x:"+200"});
        TweenNano.from(endLockUp.d, 0.2, {delay:10.6, x:"-200"});
        TweenNano.from(endLockUp.e, 0.2, {delay:10.6, x:"+200"});
        TweenNano.from(endLockUp.f, 0.2, {delay:10.8, x:"-200"});
        TweenNano.from(endLockUp.g, 0.2, {delay:10.8, x:"+200"});
        TweenNano.from(endLockUp.h, 0.2, {delay:11, x:"-120"});
        TweenNano.from(endLockUp.i, 0.2, {delay:11, x:"+120"});
        TweenNano.to(endLockUp, 0.2, {delay:11.2, scaleX:1, scaleY:1});


        TweenNano.from( cta, .5, {y:"+200", ease:Back.easeOut, delay:11.4});

        TweenNano.from( logo, .15, {y:-62.65 , delay:11.85});
        TweenNano.from( legal, .1, {alpha:0, delay:11.9});



    }

    private function clickOver(e:MouseEvent):void
    {
        TweenNano.to( cta, .25, {scaleX:1.15, scaleY:1.15});
    }

    private function clickOut(e:MouseEvent):void
    {
        TweenNano.to( cta, .25, {scaleX:1, scaleY:1});
    }

    function clickHandler(e:MouseEvent):void {
        var click_url:String = root.loaderInfo.parameters.clickTAG;
        if(click_url) {
        navigateToURL(new URLRequest(click_url), '_blank');
        TweenNano.stop();
                        }
            }


        }

 }

Анимация вложена в другой файл .as Редактировать: вставить весь код файла .as.

Заранее спасибо.


person mralanlee    schedule 01.05.2014    source источник


Ответы (1)


Это останавливает всю анимацию:

package 
{
    import flash.display.MovieClip;
    import flash.display.DisplayObject;
    public function stop_animation(object:Object, checker:Function=null):void
    {
        if (checker != null)
        {
            if(!checker(object))
                return;
        }   
        if(!object)
            return;
        if(object as MovieClip)
            object.gotoAndStop(object.currentFrame);
        if(!object.hasOwnProperty("numChildren")||(! object as DisplayObject))
            return;
        for(var i:int=0;i<object.numChildren;++i)
            stop_animation(object.getChildAt(i));
    }
}

Это останавливает всю анимацию, которая находится под щелчком мыши: РЕДАКТИРОВАТЬ: На самом деле, это не так, когда клипы вложены

package 
{
    import flash.display.MovieClip;
    import flash.display.DisplayObject;

    public function stop_animation(object:Object, stage:*, checker:Function=null):void
    {
        if (checker != null)
        {
            if(!checker(object))
                return;
        }   
        if(!object)
            return;
        if(object as MovieClip)
            if(object.hitTestPoint(stage.mouseX,stage.mouseY))
                object.gotoAndStop(object.currentFrame);
        if(!object.hasOwnProperty("numChildren")||(! object as DisplayObject))
            return;
        for(var i:int=0;i<object.numChildren;++i)
            stop_animation(object.getChildAt(i),stage);
    }
}

и может вызываться так: stop_animation(this,stage); Если вы передаете функцию проверки, все объекты, для которых она возвращает false, будут исключены из применения функций.


Это, вероятно, не будет работать с массивами, словарями и т. Д., Но вы можете перебирать их и вызывать из текущего элемента. (Предположим, что у них нет внутренних массивов/словарей)


Код, который должен остановить анимацию зеленого носка:

    package 
{
    import flash.events.Event;
    import com.greensock.*;
    import com.greensock.easing.*;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class main extends MovieClip
    {
        var is_stopped:Boolean=false;

        var tweens:Array=new Array();
        public function main()
        {
            addEventListener(Event.ADDED_TO_STAGE,setup);
            addEventListener(MouseEvent.MOUSE_DOWN, clickHandler);
        }
        public function setup(e:Event):void
        {
            tweens.push(TweenNano.from( t1, .5, {alpha:0, scaleX:0, scaleY:0, ease:Back.easeOut, delay:0}));
            tweens.push((TweenNano.to( t1, .5, {scaleX:0, scaleY:0, ease:Back.easeIn, delay:1.75})));

        }
        public function clickHandler(e:MouseEvent):void
        {
            trace("!");
            is_stopped=true;
            t1.stop();
            for(var i in tweens)
            {
                tweens[i].kill();
            }
        }
    }
}

CLICK иногда ведет себя некорректно, поэтому заменил на DOWN

person user2136963    schedule 02.05.2014
comment
Что вы передаете как объект? - person user2136963; 02.05.2014
comment
Это должен быть мувиклип, который вы хотите остановить, или его родитель. Или у вас нет ссылки на такие клипы? - person user2136963; 02.05.2014
comment
Анимации используются в greensock, поэтому в коде вы увидите часть TweenNano, в которой используется анимация. Извините, я не очень разбираюсь в Flash. Если это поможет, я хочу остановить все анимации на всем кадре, в котором сделан щелчок. - person mralanlee; 02.05.2014
comment
Я добавил новый код. Он останавливает анимацию, по крайней мере, в файле, который я создал - person user2136963; 02.05.2014
comment
Нет необходимости в is_stopped. Это из предыдущей попытки. - person user2136963; 02.05.2014
comment
Я не уверен, где добавить это в моем коде, поскольку он, похоже, забрал мой clickTag - person mralanlee; 03.05.2014
comment
Добавьте все ваши TweenNano от и до к анимациям массива, как в этом коде. В функции тега клика for(var i in tweens){tweens[i].kill();} Кроме того, используйте stop() на каждом из ваших клипов: t1, t2, логотип и т. д. - person user2136963; 03.05.2014
comment
Я получаю сообщение об ошибке 1120: Доступ к неопределенным свойствам анимации. - person mralanlee; 04.05.2014