Просмотр полной версии : Какие параметры принимает оnCompleteParams?
Есть код, в котором используется TweenLite.
Нужно по окончанию движения мувика начать двигать обратно на исходные координаты. Как дождаться завершения?
На сайте Greensock Джек рекомендует использовать вместе с параметром onComplete параметр onCompleteParams (оnComplete почему-то срабатывает в начале анимации).
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.TimelineLite;
TweenLite.to(d0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
function back() {
###########
}
Нигде не могу найти какие аргументы он в себя принимает.
В официальной справке нашел только эту строку.
onCompleteParams:Array — An Array of parameters to pass the onComplete function.
Помогите, пожалуйста, кто чем может.
Любые параметры, какие захотите.
TweenLite.to(d0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut, onCompleteParams:["hello", 124, new Sprite()] });
function back(str:String, num:uint, spr:Sprite) {
###########
}
оnComplete почему-то срабатывает в начале анимации Вот это странно. Должно срабатывать после окончания анимации. Проверьте всё хорошо. Никакие параметры вам не нужны.
Возможно, ваша функция вызывается ещё откуда-нибудь.
Любые параметры, какие захотите.
TweenLite.to(d0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut, onCompleteParams:["hello", 124, new Sprite()] });
function back(str:String, num:uint, spr:Sprite) {
###########
}
Вот это странно. Должно срабатывать после окончания анимации. Проверьте всё хорошо. Никакие параметры вам не нужны.
Возможно, ваша функция вызывается ещё откуда-нибудь.
Откуда??? Это и весь код... Я САМ В ЗАМЕШАТЕЛЬСТВЕ И ХОЧЕТСЯ ВЫТЬ ОТ БЕССИЛИЯ.
Вы передали в функцию какие-то параметры, А если мне не надо ничего принимать?
Эти параметры можно задать самостоятельно. Любые.
Вам onCompleteParams не нужен вообще, о чём я выше написал
Дело в том, что не получается выстроить последовательные анимации TweenLite.to... Выполняются одновременно. Может я чего-то не понимаю?..
Добавлено через 5 минут
Пример:import com.greensock.*;
import com.greensock.easing.*;
TweenLite.to(mc0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc1, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc2, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
// мувики ринулись одновременно в одну точку, а не друг за дружкой как идут строчки кода...
Нужно по окончанию движения мувика начать двигать обратно на исходные координаты.
Тогда может просто сделать так?
TweenMax.to(obj, 2, {x:150,repeat:1,yoyo:true } );
samana, Вы использовали TweenMax, a нужен TweenLite. В коде у вас какие-то не понятные параметры "yoyo:true", мне вообще не нужен repeat, поэтому его можно проигнорировать. Мне очень жаль, Ваш код не решает проблемы отсутствия последовательной анимации.
TweenLite.to(mc0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc1, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc2, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
// мувики ринулись одновременно в одну точку, а не друг за дружкой как идут строчки кода...
Так само собой. Вас не поймёшь, то одно, то другое спрашиваете...
Используйте параметр delay или TimeLineLite
TweenLite.to(mc0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc1, 1, {delay:1,x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc2, 1, {delay:2, x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
illuzor, простите меня за не четкость вопроса...
А можете рассказать зачем TimeLineLite, что она делает и как?
Это класс для управления анимацией
http://www.greensock.com/timelinelite/
Если я правильно понял, то TimeLineLite создаёт виртуальный таймлайн и выстраивает на нём программные анимации? Длинна этого таймлайна измеряется как-то?
Это класс для управления секвенциями экземпляров программных анимаций. Назван так, потому что логически подходит название.
Измеряется в секундах. Откройте документацию и посмотрите.
Извините Александр, у меня не очень с английским. Что такое секвенция экземпляра?
секвенция экземпляра
Группа, "массив".
Вы что издеваетесь? Вы запускаете анимации в один момент времени. Почему оно должно выполниться последовательно?
TweenLite.to(mc0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc1, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc2, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
можно так
TweenLite.to(mc0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc1, 1, {delay:1, x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
TweenLite.to(mc2, 1, {delay:2, x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
или так
TweenLite.to(mc0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut,onComplete:tween2});
function tween2():void
{
TweenLite.to(mc1, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut,onComplete:tween3});
}
function tween3():void
{
TweenLite.to(mc2, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
}
Добавлено через 3 минуты
а вообще на странице у гринсока снизу есть пример, который демонстрирует базовый функционал и отвечает на ваши вопросы
//import the GreenSock classes
import com.greensock.*;
import com.greensock.easing.*;
//tween the MovieClip named "mc" to an alpha of 0.5 over the course of 3 seconds
TweenLite.to(mc, 3, {alpha:0.5});
//scale myButton to 150% (scaleX/scaleY of 1.5) using the Elastic.easeOut ease for 2 seconds
TweenLite.to(myButton, 2, {scaleX:1.5, scaleY:1.5, ease:Elastic.easeOut});
//tween mc3 in FROM 100 pixels above wherever it is now, and an alpha of 0. (notice the vars object defines the starting values instead of the ending values)
TweenLite.from(mc3, 1, {y:"-100", alpha:0});
//after a delay of 3 seconds, tween mc for 5 seconds, sliding it across the screen by changing its "x" property to 300, using the Back.easeOut ease to make it shoot past it and come back, and then call the onFinishTween() function, passing two parameters: 5 and mc
TweenLite.to(mc, 5, {delay:3, x:300, ease:Back.easeOut, onComplete:onFinishTween, onCompleteParams:[5, mc]});
function onFinishTween(param1:Number, param2:MovieClip):void {
trace("The tween has finished! param1 = " + param1 + ", and param2 = " + param2);
}
//call myFunction() after 2 seconds, passing 1 parameter: "myParam"
TweenLite.delayedCall(2, myFunction, ["myParam"]);
//use the object-oriented syntax to create a TweenLite instance and store it so we can reverse, restart, or pause it later.
var myTween:TweenLite = new TweenLite(mc2, 3, {y:200, alpha:0.5, onComplete:myFunction});
//some time later (maybe in by a ROLL_OUT event handler for a button), reverse the tween, causing it to go backwards to its beginning from wherever it is now.
myTween.reverse();
//pause the tween
myTween.pause();
//restart the tween
myTween.restart();
//make the tween jump to exactly its 2-second point
myTween.currentTime = 2;
Добавлено через 5 минут
Исходя из этого ответ на ваш первый вопрос будет выглядеть так
import com.greensock.TweenLite;
import com.greensock.easing.Cubic;
var tween:TweenLite=new TweenLite(d0, 1, {x:500, y:200, onComplete:back, ease:Cubic.easeInOut});
function back() {
tween.reverse();
}
а если так - тогда мы ее еще и зациклим. Чудо!
import com.greensock.TweenLite;
import com.greensock.easing.Cubic;
var tween:TweenLite;
start_tween();
function start_tween()
{
tween = new TweenLite(d0,1,{x:100,y:100,onReverseComplete:start_tween,onComplete:back,ease:Cubic.easeInOut});
}
function back()
{
tween.reverse();
}
Результат, если что во вложении
Жень Шень
12.06.2012, 14:17
А может просто так надо?
import com.greensock.*;
import com.greensock.easing.*;
var timeline:TimelineLite = new TimelineLite();
timeline.append( new TweenLite(mc0, 1, {x:500, y:200, ease:Cubic.easeInOut}) );
timeline.append( new TweenLite(mc1, 1, {x:500, y:200, ease:Cubic.easeInOut}) );
timeline.append( new TweenLite(mc2, 1, {x:500, y:200, ease:Cubic.easeInOut}) );
timeline.insertMultiple( TweenMax.allTo([mc0, mc1, mc2], 1, {x:0, y:0}), timeline.duration );
Ссори, там еще надо зациклить туда-сюда...
А может просто так надо?
Ссори, там еще надо зациклить туда-сюда...
Возможен и такой варинат. Лично я с таймлайн лайт не работал - нет таких задач. Мне гораздо удобнее обрабатывать онКомплиты. Есть ли такая возможность при работе с этим классом?
Добавлено через 21 минуту
обработчики комплитов нужно добавлять в коструктор таймлайна
import com.greensock.*;
import com.greensock.easing.*;
var timeline:TimelineLite = new TimelineLite({onComplete:reverse,onReverseComplete:restart});
timeline.append( new TweenLite(mc0, 1, {x:500, y:200, ease:Cubic.easeInOut}) );
timeline.append( new TweenLite(mc1, 1, {x:500, y:200, ease:Cubic.easeInOut}) );
timeline.append( new TweenLite(mc2, 1, {x:500, y:200, ease:Cubic.easeInOut}) );
function restart():void
{
timeline.restart();
}
function reverse():void
{
timeline.reverse();
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.