Форум Flasher.ru

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

Captain QUAZAR 26.12.2009 13:55

Зацикливание Tween
 
Ребята, подскажите пожалуйста. Такая проблема. Два объекта должны двигаться синхронно при помощи Tween. Но при этом движение должно повторятся. то есть, вот сработал Tween, объекты достигли определенной точки по y, и через некоторое время они должны пройти обратный путь, т.е. вернуться в свою первоначальную точку. Я решил это проделать с помощью таймера. Вот мой код:
Код AS3:

import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
 
var m:Boolean = true;
var motionTimer:Timer = new Timer(7000);
motionTimer.start();
motionTimer.addEventListener(TimerEvent.TIMER, motionList);
function motionList(e:TimerEvent):void{
        if(m==true){
                vniz();
                m=false;
        }else{
                vverh();
                m=true;
        }
        trace(container.y);
trace(fotka.y);
}
function vniz(){
var fotoTween:Tween = new Tween(fotka, "y", Strong.easeOut, fotka.y, 350, 3, true);
var containerTween:Tween = new Tween(container, "y", Strong.easeOut, container.y, 200, 3, true);
 
}
function vverh(){
var fotoTween2:Tween = new Tween(fotka, "y", Strong.easeOut, fotka.y, 150, 3, true);
var containerTween2:Tween = new Tween(container, "y", Strong.easeOut, container.y, 0, 3, true);
}

Этот код вроде бы и работает, но не совсем корректно. Иногда объекты останавливаются, не дойдя до нужной точки. Или бывает, container запаздывает за fotka. Объект container - это Sprite, а fotka - MovieClip.
Подскажите, может быть, как испаравить? Может и зацикливание как-то проще можно сделать? Или как-нибудь обоим объектам назначить один и тот же Твин, чтобы они двигались синхронно?

Jewelz 26.12.2009 14:09

у Tween есть событие об окончании анимации, видимо это
Код AS3:

TweenEvent.MOTION_FINISH

(сам пользуюсь Tweener'ом поэтому точно не скажу)

подпишитесь на него, и при срабатывании добавляйте движение снова

Captain QUAZAR 26.12.2009 14:39

Jewelz, да, но мне же нужно, чтообы обратное движение начиналось, например, через 5 сек., а при использовании TweenEvent.MOTION_FINISH оно у меня сразу начинается.:( Я попробовал и здесь таймер прикрепить, чтоб задержка была, но снова глючит у меня.
Код AS3:

var timer1:Timer = new Timer(8000);
timer1.start()
timer1.addEventListener(TimerEvent.TIMER, timerList);
function timerList(e:TimerEvent):void{
 
 
var tween1:Tween = new Tween(mc, "y", Strong.easeInOut, mc.y, 400, 3, true);
tween1.addEventListener(TweenEvent.MOTION_FINISH, tween1Fin);
function tween1Fin(e:TweenEvent):void{
        var timer2:Timer = new Timer(3000);
        var n:Number = 0;
        timer2.start();
        timer2.addEventListener(TimerEvent.TIMER, timer2List);
        function timer2List(e:TimerEvent):void{
                        var ween2:Tween = new Tween(mc, "y", Strong.easeInOut, mc.y, 0, 3, true);
 
                        timer2.removeEventListener(TimerEvent.TIMER, timer2List);
                        }
}
}


Jewelz 26.12.2009 15:16

значит у вас tween'ы съедаются gc, сделайте их не локальными переменными, а глобальными, то есть объявите вне функций

Alex Lexcuk 26.12.2009 15:45

у твина есть событие типа мотион_чанже
Код AS3:

tailTween = new Tween({i:0}, "i",  Elastic.easeIn, 120, 0, 2, true);
                        tailTween.stop();
                        tailTween.looping = true;
                        tailTween.addEventListener(TweenEvent.MOTION_CHANGE, tailTweenMotionChange);
 
                }
 
                public function playTail():void {
                        tailTween.start();
                }
 
                public function stopTail():void {
                        tailTween.stop();
                }
 
                private function tailTweenMotionChange(evt:TweenEvent):void {
                        cat.tail.rotation = tailTween.obj.i;
                }

здесь полностью
http://www.murmadillo.tut.su/as3/load-swf-metod.html
еще можно пустой объект с одним свойством сделать и менять это свойство твином
http://www.murmadillo.tut.su/html/tw...c-os-menu.html

Я думаю тут прикол в чем, когда вы изменяете дисплей объекту например 'y' и нечайно сами ставите этому объкту допустим y=10; адобовский твин начинает думать что он уже не нужен и вреден для проекта и кончает жизнь самоубийством, это гарбаж коллектор его съест одним трупяком во флешке будет меньше.

Captain QUAZAR 26.12.2009 21:24

Да, ребята, спасибо! По совету Jewelz вынес
Код AS3:

var tween1:Tween; var tween2:Tween;

за пределы функции. Теперь все работает, как надо.


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

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