Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   анимация в классе (http://www.flasher.ru/forum/showthread.php?t=210532)

reqyzik 26.03.2015 15:51

анимация в классе
 
пишу класс:
Код AS3:

package
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        import flash.events.Event;
        import flash.display.DisplayObject;
 
        import fl.motion.AnimatorFactory;
        import fl.motion.MotionBase;
        import fl.motion.Motion;
        import flash.filters.*;
        import flash.geom.Point;
 
        public class IList extends MovieClip
        {
                private var go:Boolean = false;
                var ent1 = new MovieClip;
 
                public function IList()
                {
                        InitAnimation();
 
                        addEventListener(MouseEvent.MOUSE_OVER,_onMouseOver);
                        addEventListener(MouseEvent.MOUSE_OUT,_onMouseOut);
                        addEventListener(Event.ENTER_FRAME,_onEnterFrame);
                }
 
                function _onMouseOver(event:MouseEvent):void
                {
                        if(!go)
                        {
                                parent.setChildIndex(this,parent.numChildren-1);
                                go = true;
                        }
                }
 
                private function _onMouseOut(event:MouseEvent):void
                {
                        go = false;
                }
 
                private        function _onEnterFrame(e:Event):void
                {
                        if(go)
                                nextFrame();
                        else
                                prevFrame();
                }
 
                function InitAnimation():void
                {
 
                        ent1.graphics.lineStyle(1,0x000000);
                        ent1.graphics.beginFill(0xCCFF00  );
                        ent1.graphics.drawRect (0,0,150,50);
                        addChild(ent1);
                        ent1.name = "ent1";
 
                        var __motion_Flag1:MotionBase;
                        if(__motion_Flag1 == null)
                        {
                            __motion_Flag1 = new Motion();
                            __motion_Flag1.duration = 9;
                            __motion_Flag1.addPropertyArray("y", [0,2,4,6,8,10,12,14,16]);
 
                            var __animFactory_Flag1:AnimatorFactory = new AnimatorFactory(__motion_Flag1);
                            __animFactory_Flag1.transformationPoint = new Point(0.500000, 0.500000);
 
                                __animFactory_Flag1.addTarget(ent1, 0);
                        }
                }
        }
}

ent1 рисуется, но анимация почему - то не срабатывает, подскажите пожалуйста в чем я не прав?

dimarik 26.03.2015 20:47

Скорее всего анимация после создания тут же удаляется после выходя из области видимости метода InitAnimation, потому что ссылка на нее объявлена локальной.

reqyzik 26.03.2015 21:53

спасибо, с этим разобрался:

Код AS3:

package
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        import flash.events.Event;
        import flash.display.DisplayObject;
 
        import fl.motion.AnimatorFactory;
        import fl.motion.MotionBase;
        import fl.motion.Motion;
        import flash.filters.*;
        import flash.geom.Point;
        import flash.display.Sprite;
 
        public class IList extends MovieClip
        {
                private var go:Boolean = false;
          private var motionBase:MotionBase;
          private var animFactory:AnimatorFactory;
          private var size:uint    = 100;
          private var bgColor:uint = 0xFFCC00;
 
                public function IList()
                {
                        addEventListener(MouseEvent.MOUSE_OVER,_onMouseOver);
                        addEventListener(MouseEvent.MOUSE_OUT,_onMouseOut);
                        addEventListener(Event.ENTER_FRAME,_onEnterFrame);
 
                        var boxObj:Sprite = new Sprite();
                        boxObj.graphics.beginFill(bgColor);
                        boxObj.graphics.drawRect(0, 0, size, size);
                        boxObj.graphics.endFill();
                        boxObj.name "frgfrt";
                        addChild(boxObj);
 
                        if(motionBase == null)
                        {
                                motionBase = new Motion();
                                motionBase.duration = 17;
                                motionBase.addPropertyArray("y",[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
                                animFactory = new AnimatorFactory(motionBase);
                                animFactory.transformationPoint = new Point(0.5,0.5);
                                animFactory.addTarget(boxObj, 0);
                        }
                }
 
                function _onMouseOver(event:MouseEvent):void
                {
                        if(!go)
                        {
                                parent.setChildIndex(this,parent.numChildren-1);
                                go = true;
                        }
                }
 
                private function _onMouseOut(event:MouseEvent):void
                {
                        go = false;
                }
 
                private        function _onEnterFrame(e:Event):void
                {
                        if(go)
                                nextFrame();
                        else
                                prevFrame();
                        trace(currentFrame);
                }
        }
}

теперь другой вопрос:

почему анимация воспроизводится беспорядочно с непонятной скоростью, и как мне работать с ней?

п.с. в привычном режиме, при создании флеш анимации я работать умею, а через класс впервые

Добавлено через 23 часа 27 минут
немного переделал класс, но по прежнему не знаю как управлять анимацией, созданной таким способом:

Код AS3:

package
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        import flash.events.Event;
        import flash.display.DisplayObject;
 
        import fl.motion.AnimatorFactory;
        import fl.motion.MotionBase;
        import fl.motion.Motion;
        import flash.filters.*;
        import flash.geom.Point;
        import flash.display.Sprite;
        import fl.motion.MotionEvent;
 
        public class IList extends MovieClip
        {
                private var go:Boolean = false;
                private var motionBase:MotionBase;
                private var animFactory:AnimatorFactory;
                private var size:uint    = 100;
                private var bgColor:uint = 0xFFCC00;
 
                public function IList()
                {
                        var boxObj = new MovieClip();
                        boxObj.graphics.beginFill(bgColor);
                        boxObj.graphics.drawRect(0, 0, size, size);
                        boxObj.graphics.endFill();
                        addChild(boxObj);
 
                        if(motionBase == null)
                        {
                                motionBase = new Motion();
                                motionBase.duration = 32;
                                motionBase.addPropertyArray("y",[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]);
                                motionBase.overrideTargetTransform();
                                animFactory = new AnimatorFactory(motionBase);
                                animFactory.transformationPoint = new Point(0.5,0.5);
                                animFactory.addTarget(boxObj, 0);
                        }
                }
 
        }
}

на обычные
Код AS3:

stop()

не реагирует, воспроизводится без остановки
метод
Код AS3:

addFrameScript(1,funct)

тоже не работает

честное слово, я в тупике и мне нужна помощь

хочу добиться пока что остановки и запуска анимации в нужный мне момент, жду помощи, и надеюсь что она будет


вопрос решен, добавлением
таких строк:
Код AS3:

private var animBase:AnimatorBase = new AnimatorBase();
animBase = animFactory.addTarget(boxObj, 0);

спасибо всем, можно тему закрывать


Часовой пояс GMT +4, время: 00:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.