PDA

Просмотр полной версии : Какие параметры принимает оnCompleteParams?


Шурик_2
10.06.2012, 00:20
Есть код, в котором используется 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.
Помогите, пожалуйста, кто чем может.

illuzor
10.06.2012, 00:23
Любые параметры, какие захотите.

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 почему-то срабатывает в начале анимации Вот это странно. Должно срабатывать после окончания анимации. Проверьте всё хорошо. Никакие параметры вам не нужны.
Возможно, ваша функция вызывается ещё откуда-нибудь.

Шурик_2
10.06.2012, 14:30
Любые параметры, какие захотите.

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) {

###########

}

Вот это странно. Должно срабатывать после окончания анимации. Проверьте всё хорошо. Никакие параметры вам не нужны.
Возможно, ваша функция вызывается ещё откуда-нибудь.
Откуда??? Это и весь код... Я САМ В ЗАМЕШАТЕЛЬСТВЕ И ХОЧЕТСЯ ВЫТЬ ОТ БЕССИЛИЯ.
Вы передали в функцию какие-то параметры, А если мне не надо ничего принимать?

illuzor
10.06.2012, 14:42
Эти параметры можно задать самостоятельно. Любые.
Вам onCompleteParams не нужен вообще, о чём я выше написал

Шурик_2
10.06.2012, 15:33
Дело в том, что не получается выстроить последовательные анимации 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});
// мувики ринулись одновременно в одну точку, а не друг за дружкой как идут строчки кода...

samana
10.06.2012, 15:39
Нужно по окончанию движения мувика начать двигать обратно на исходные координаты.
Тогда может просто сделать так?
TweenMax.to(obj, 2, {x:150,repeat:1,yoyo:true } );

Шурик_2
10.06.2012, 15:48
samana, Вы использовали TweenMax, a нужен TweenLite. В коде у вас какие-то не понятные параметры "yoyo:true", мне вообще не нужен repeat, поэтому его можно проигнорировать. Мне очень жаль, Ваш код не решает проблемы отсутствия последовательной анимации.

illuzor
10.06.2012, 16:02
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});

Шурик_2
10.06.2012, 16:05
illuzor, простите меня за не четкость вопроса...
А можете рассказать зачем TimeLineLite, что она делает и как?

illuzor
10.06.2012, 16:06
Это класс для управления анимацией
http://www.greensock.com/timelinelite/

Шурик_2
10.06.2012, 16:09
Если я правильно понял, то TimeLineLite создаёт виртуальный таймлайн и выстраивает на нём программные анимации? Длинна этого таймлайна измеряется как-то?

КорДум
10.06.2012, 16:48
Это класс для управления секвенциями экземпляров программных анимаций. Назван так, потому что логически подходит название.
Измеряется в секундах. Откройте документацию и посмотрите.

Шурик_2
10.06.2012, 16:52
Извините Александр, у меня не очень с английским. Что такое секвенция экземпляра?

Inet_PC
10.06.2012, 16:53
Последовательность.

КорДум
10.06.2012, 16:54
секвенция экземпляра
Группа, "массив".

Шурик_2
10.06.2012, 21:12
Спасибо товарищи!

XoJlToH
11.06.2012, 17:13
Вы что издеваетесь? Вы запускаете анимации в один момент времени. Почему оно должно выполниться последовательно?
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 );

Ссори, там еще надо зациклить туда-сюда...

XoJlToH
12.06.2012, 14:24
А может просто так надо?
Ссори, там еще надо зациклить туда-сюда...
Возможен и такой варинат. Лично я с таймлайн лайт не работал - нет таких задач. Мне гораздо удобнее обрабатывать онКомплиты. Есть ли такая возможность при работе с этим классом?


Добавлено через 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();
}