Форум 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=170618)

MadEx 28.10.2011 20:54

Глючная анимация.
 
Здравствуйте!

Разрабатываю флешку для сайта. Посмотреть можно тут http://94.229.12.216/ Так вот, соты должны увеличиваться при наведении (плавно, анимированно, красиво) и уменьшаться в обратном направлении так же плавно и красиво, когда мышку убираешь. Я сделал анимацию с помощью твинов, но вот незадача: если активно поёрзать мышкой по сотам, то они начинают сдвигаться с места. Причем чем дольше ставишь duration для tween'а, тем больше вероятность что сота уползет в сторону.

Вот код класса соты:
Код AS3:

package main{
        import flash.display.MovieClip;
        import flash.events.Event;
    import flash.events.MouseEvent;
        import flash.net.*;
        import flash.filters.*;
        //import fl.motion.Animator;
        //import flash.display.Sprite;
        import fl.transitions.Tween;
        import fl.transitions.easing.*;
        import fl.transitions.TweenEvent;
        import flash.text.TextField;
        import flash.geom.Point;
 
        dynamic public class sota extends MovieClip{
        var Tweens = new Array();
        var Picture = new MovieClip();
        public var Title:String = "";
        public var Desc:String = "";
        public var Link:String = "";
 
 
                public function sota() {
                        // constructor code
                        buttonMode = true;
                        useHandCursor = true;
                        addEventListener(MouseEvent.ROLL_OVER, SotaEnter);
                        addEventListener(MouseEvent.ROLL_OUT, SotaLeave);
                        addEventListener(MouseEvent.CLICK, gotourl);
 
                }
                public function getPicture(pic:MovieClip):void {
                        Picture = pic;
                }
                public function setTitle(titl:String):void {
                        Title = titl;
                }
                public function setDesc(titl:String):void {
                        Desc = titl;
                }
                public function setLink(titl:String):void {
                        Link = titl;
                }
                public function SotaEnter(e:MouseEvent):void {               
                        // Поднимаем соту выше остальных
                        this.parent.addChildAt(this, parent.numChildren-1);
 
                        (parent.parent as MovieClip).desc.text = Desc;
                        title.text = Title;
                        Tweens[8] = new Tween(plashka, "alpha", Strong.easeOut, 0, 1, 1, true);
 
                        addChildAt(title, numChildren-1);
                        if(Picture.name != Picture.parent.getChildAt(Picture.parent.numChildren-1).name) {
                                Picture.parent.addChildAt(Picture, Picture.parent.numChildren-1);
                                var myTween:Tween = new Tween(Picture, "alpha", Strong.easeOut, 0, 1, 1, true);
                        }
 
                        // Запишем анимацию увеличения соты
 
                        Tweens[0] = new Tween(contur, "scaleX", Back.easeOut, 1, 1.2, 10, false);
                        Tweens[1] = new Tween(contur, "x", Back.easeOut, contur.x, contur.x-0.1*contur.width, 10, false);
                        Tweens[2] = new Tween(contur, "scaleY", Back.easeOut, 1, 1.2, 10, false);
                        Tweens[3] = new Tween(contur, "y", Back.easeOut, contur.y, contur.y-0.1*contur.height, 10, false);
                        Tweens[4] = new Tween(maska, "scaleX", Back.easeOut, 1, 1.2, 10, false);
                        Tweens[5] = new Tween(maska, "x", Back.easeOut, maska.x, maska.x-0.1*maska.width, 10, false);
                        Tweens[6] = new Tween(maska, "scaleY", Back.easeOut, 1, 1.2, 10, false);
                        Tweens[7] = new Tween(maska, "y", Back.easeOut, maska.y, maska.y-0.1*maska.height, 10, false);
 
 
                        // Добавляем фильтр свечения
                        // Параметры свечения
                        var color:Number = 0x33CCFF;
            var alpha:Number = 0.8;
            var blurX:Number = 8;
            var blurY:Number = 8;
            var strength:Number = 2;
            var inner:Boolean = false;
            var knockout:Boolean = false;
            var quality:Number = BitmapFilterQuality.HIGH;
 
                        // Сам фильтр
            var filterG = new GlowFilter(color,
                                  alpha,
                                  blurX,
                                  blurY,
                                  strength,
                                  quality,
                                  inner,
                                  knockout);
 
                        // Добавляем фильтр в список фильтров
                        filters = [filterG];
                        trace("up");
 
                }
                public function SotaLeave(e:MouseEvent):void {
 
                        for each (var myTween in Tweens) {
                                myTween.yoyo();
                        }
 
                        // Очищаем значение фильтра
                        filters = [];
                        title.text = '';
                        trace("down");
                }
                public function gotourl(e:MouseEvent) {
                                  var my_request:URLRequest = new URLRequest(Link);
                                  navigateToURL(my_request, "_self");
                }
        }
 
}

Сами соты представляю собой картинки с масками в виде соты и контуром соты:
http://cl.ly/3p262n2d1j3Q171D3x3s


У кого-нибудь есть идеи по поводу данного глюка?

goodguy 28.10.2011 21:24

Потому что пока твин не завершен, у свойств объекта одни значения, когда завершен, уже другие, а если твин запустить пока он еще не завершился, то новые значения добавляются не к исходным, а к тем, что есть на данный момент.
+ Стандартные твины сами по себе, мягко говоря, не очень. Лучше использовать greensock tweenlitte или tweenmax, или caurina tweener

dsQuadro 28.10.2011 21:25

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

MadEx 01.11.2011 13:54

Цитата:

Сообщение от dsQuadro (Сообщение 1042410)
если сделать начало координат в центре соты и не двигать ее при анимации, а только масштабировать эта проблема должна пропасть, но со временем они и масштабироваться начинают криво...

А как мне перенести начало координат в центр соты? На сколько я понял - твин всё равно от левого вернхнего угла будет масшабироваться - поэтому двигать его обязательно.

Vektor 01.11.2011 14:20

Жестко, установите, начальные координаты, для клипов, и в конце анимации, устанавливайте клип на место.

MadEx 01.11.2011 14:25

Цитата:

Сообщение от Vektor (Сообщение 1042964)
Жестко, установите, начальные координаты, для клипов, и в конце анимации, устанавливайте клип на место.

Я пробовал сделать так:
При добавлении соты взять начальные координаты контура и маски и записать в глобальную переменную.
В событие SotaLeave после выполнения анимации вернуть соту на место. Т.е. видимо надо попробвать эту операцию выполнить в событии Motion.STOP ?

Добавлено через 5 часов 27 минут
Разобрался с пененосом центра координат и соты убегать перестали


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

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