PDA

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


nOobCrafter
15.07.2009, 13:32
День добрый, есть задача, нужно программно анимировать элемент что бы он двигался к какой то точке, а после этого двигался обратно. Казалось бы все просто, но задача усложняется тем что таких елементов много, вот пример действий:
var endTween:Boolean = false;


mc.onRollOver = sectionOver; // при наведении на пункт раздела запускаем анимацию...

function sectionOver():Void
{
endTween = false;

var ArrowX:Tween = new Tween(this.smallArrow, "_x", None.easeOut, this.smallArrow._x, this.smallArrow.targetX, TIME_A / 2, true);
ArrowX.onMotionFinished = function()
{
if(!endTween)
{
ArrowX.yoyo();
} else {
ArrowX.stop();
}
}
этот вариант хорош когда элемент один, а когда их много то возникают проблемы с флагами, нужно для каждого делать по своему флагу, чтот весьма геморно. Хорошо было бы сделать обьекту св-во и в него записывать нужное состояние, но из твина до обьекта не достучишься. Так что я несколько зашел в тупик.
-------------------------------
Собсна эта логика анимации нормальная? или лучше использовать что то другое, в голову приходит по тому же событию onMotionFinished запускать еще несколько твинов играющих в обратном направлении или пользоватьс setTimeout, имхо послдених 2 варианта более корявые в исполнении. Кто что может посоветовать?
Вот пример:

dimarik
15.07.2009, 13:38
Зачем Вам в принципе состояние объекта?

nOobCrafter
15.07.2009, 13:44
textX.onMotionFinished = function()
{
if(!this.endTween) // вот так нельзя..хотя очень хотелось бы
{
textX.yoyo();
endTween = true;
} else {
textX.stop();
}
}
...вот так думалось

dimarik
15.07.2009, 13:48
Кстати, зря Вы так говорите, что из твина не достучаться до твинируемого объекта.

Гляньте реализацию класса в {system_drive}\{user}\AppData\Local\Adobe\Flash CS3\en\Configuration\Classes\mx\transitions\Tween. as


public var isPlaying:Boolean;
public var obj:Object;

Этого, думаю, хватит.

nOobCrafter
15.07.2009, 13:53
dimarik ага спс большое, тогда все легко решается)..